How to print 16-bit uint16_t as four hex digits in Arduino
When using Arduino, you often want to print the hex value of a 16-bit value such as a uint16_t
, consisting of four hex digits. For example, if you have uint16_t val = 2022;
, you intend to print 07E6
.
In Arduino you can do that using Serial.printf()
with %04x
as format specifier.
Furthermore, you typically want to invert the byte order of the uint16_t
using __builtin_bswap16()
since it’s more inuitive to write the hex value MSB-first (big-endian) while most hardware platforms represent the uint16_t
as LSB-first (little-endian):
Serial.printf("val = %04x\r\n", __builtin_bswap16(val));
When using printf, %x
means to format the value as hex. 04
means to pad the value with 0
s up to a length of 4
digits. If you would format 2022
using just %x
, it would print 7E6
instead of 07E5
. This is why you need to use %04x
instead.