问题很简单:将32位或64位整数分割成若干字节发送到1字节接口(通常是uart、spi或i2c)上。我可以使用位掩码和移位轻松获取所需内容,但我希望这个方法具有可移植性,可以在大端和小端上工作,并且适用于不舍弃位但通过进位旋转的平台(掩码会去除多余位吗?)。以下是示例代码:
我希望能够保证这在任何支持32位整数或更高的平台上都能正常运行。我不知道这是否正确。
uint32_t value;
uint8_t buffer[4];
buffer[0] = (value >> 24) & 0xFF;
buffer[1] = (value >> 16) & 0xFF;
buffer[2] = (value >> 8) & 0xFF;
buffer[3] = value & 0xFF;
我希望能够保证这在任何支持32位整数或更高的平台上都能正常运行。我不知道这是否正确。
>>
运算符始终是位移,而不是旋转(即它总是丢弃右侧的位)。 - interjayunion { uint32_t u32; uint8_t u8[4]; } t; t.u32 = value;
这样的代码。 - Giovanni Cerretani