我需要与没有 nthol 功能的 8 位设备通信。也不可能使用协议缓冲区库。
无论运行什么架构(不同的字节序,不同的位数),以下 C 函数都会产生相同的输出字符串:
void encode(uint32_t input, unsigned char* buf, int buf_len) {
assert(sizeof(uint32_t) <= buf_len);
buf[0] = input >> 24 & 0xFF;
buf[1] = input >> 16 & 0xFF;
buf[2] = input >> 8 & 0xFF;
buf[3] = input & 0xFF;
}
以下函数将正确读取此类编码字符串并在所有架构上产生相同的结果:
void decode(const unsigned char* buf, int buf_len, uint32_t* output) {
assert(sizeof(uint32_t) <= buf_len);
*output = buf[0];
*output <<= 8;
*output |= buf[1];
*output <<= 8;
*output |= buf[2];
*output <<= 8;
*output |= buf[3];
}
是否有可能在 8 位处理器上 32 位整数由于某种原因无法正确处理?