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.