Ich füge dieser Antwort meine 10 Cent hinzu:
u64
bedeutet einen 64-Bit-Wert ohne Vorzeichen. Je nach Architektur, auf der der Code ausgeführt/kompiliert wird, muss er anders definiert werden, um wirklich 64 Bit lang zu sein.
Auf einem x86-Rechner beispielsweise ein unsigned long
ist 64 Bit lang, also u64
für diese Maschine könnte wie folgt definiert werden:
typedef unsigned long u64;
Gleiches gilt für u32
. Auf einem x86-Rechner unsigned int
ist 32 Bit lang, also u32
für diese Maschine könnte wie folgt definiert werden:
typedef unsigned int u32;
In der Regel finden Sie den typedef
Deklaration für diese Typen auf einem types.h
Datei, die der Architektur entspricht, für die Sie Ihren Quellcode kompilieren.
Wenn Sie in der Nähe der Hardware arbeiten oder versuchen, die Größe/das Format einer Datenstruktur zu steuern, müssen Sie häufig die Größe Ihrer Ganzzahlen genau kontrollieren.
Wie bei u8
gegenüber uint8_t
, das liegt einfach daran, dass Linux älter als <stdint.h>
war in C verfügbar sein, was technisch gesehen ein C99-Ismus ist, aber meiner Erfahrung nach auf den meisten modernen Compilern sogar in ihren ANSI-C / C89-Modi verfügbar ist.