加入16位有符号整数的MSB和LSB(二进制补码)

时间:2010-07-05 15:51:42

标签: c++ integer twos-complement

我正在使用专有协议,它将整数作为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];

2 个答案:

答案 0 :(得分:1)

我相信如果short不是16位,代码将会失败,因此您的代码可能会在某些平台上失败。你可能永远找不到它失败的平台。

int16_t,如果在您的目标平台上可用,则可能是更好的选择。

答案 1 :(得分:0)

您的代码看起来正确,但您可以使用内在的C函数来确保您的协议真正独立于平台:

short my_int = ntohs(*(short*)message)