我有这个数组:
byte addr[5] = {0x56,0x5A, 0x11, 0x40, 0xBE};
如何将其转换为0x565A1140BEArduino?
最简单的方法是从字节构造值
byte addr[5] = {0x56,0x5A, 0x11, 0x40, 0xBE};
uint64_t value = ((uint64_t)addr[0] << 32)
| ((uint64_t)addr[1] << 24)
| ((uint64_t)addr[2] << 16)
| ((uint64_t)addr[3] << 8)
| ((uint64_t)addr[4] << 0);
您也可以直接将字节视为一个uint64_t值。这可能要快得多,但这取决于字节序,尽管 Arduino 编译器通常使用小字节序
uint64_t value = 0;
byte addr[5] = {0x56,0x5A, 0x11, 0x40, 0xBE};
// Copy the 5 bytes to the low bytes of the big endian value
memcpy((char*)&value + 3, addr, 5);
// The high 3 bytes will remain zero because we already initialized `value` to 0
#ifdef LITTLE_ENDIAN
value = __builtin_bswap64(value); // reverse endian
#endif
如果数组长度为 8 字节,则只需复制整个 8 字节,无需先初始化为 0
memcpy((char*)&value, addr, 8);