Arduino: 32-Bit uint32_t als acht Hex-Ziffern ausgeben

English Deutsch

In Arduino möchte man oft den Hex-Wert eines 32-Bit-Werts wie eines uint32_t ausgeben, bestehend aus acht Hex-Ziffern. Wenn man beispielsweise uint32_t val = 9177025; hat, möchte man 008C07C1 ausgeben.

In Arduino kann man das mit Serial.printf() und %08lx als Formatbezeichner tun. Außerdem möchte man typischerweise die Byte-Reihenfolge des uint32_t mit __builtin_bswap32() invertieren, da es intuitiver ist, den Hex-Wert MSB-first (Big-Endian) zu schreiben, während die meisten Hardware-Plattformen den uint32_t als LSB-first (Little-Endian) darstellen:

print_uint32.ino
Serial.printf("val = %08lx\r\n", __builtin_bswap32(val));

Bei Verwendung von printf bedeutet %x, dass der Wert als Hex formatiert wird, während l printf() mitteilt, dass das Argument ein long (32 Bit) ist, im Gegensatz zu einem int (16 Bit). 08 bedeutet, dass der Wert mit 0en auf eine Länge von 8 Ziffern aufgefüllt wird. Wenn man 9177025 nur mit %x formatieren würde, würde 008C07C1 statt 008C07C1 ausgegeben. Deshalb muss man %08lx verwenden.


Check out similar posts by category: Arduino, Electronics, Embedded, PlatformIO