1

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

2 回答 2

1

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

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

于 2010-07-05T16:01:35.863 回答
0

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

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

于 2010-07-05T16:05:15.163 回答