我正在使用专有协议,它将整数作为16位二进制补码分两部分传输。首先发送LSB,然后发送MSB。以下代码是否正确恢复原始值?
unsigned char message[BLK_SIZE];
// read LSB to message[0] and MSB to message[1]
short my_int = (message[1] << 8) | message[0];
答案 0 :(得分:1)
我相信如果short
不是16位,代码将会失败,因此您的代码可能会在某些平台上失败。你可能永远找不到它失败的平台。
int16_t,如果在您的目标平台上可用,则可能是更好的选择。
答案 1 :(得分:0)
您的代码看起来正确,但您可以使用内在的C函数来确保您的协议真正独立于平台: