我正在使用专有协议来传输整数作为16位二进制补码。先发送LSB,然后发送MSB。以下代码是否可以恢复原始值正确?加入一个16位有符号整数(二进制补码)的MSB和LSB
unsigned char message[BLK_SIZE];
// read LSB to message[0] and MSB to message[1]
short my_int = (message[1] << 8) | message[0];
我正在使用专有协议来传输整数作为16位二进制补码。先发送LSB,然后发送MSB。以下代码是否可以恢复原始值正确?加入一个16位有符号整数(二进制补码)的MSB和LSB
unsigned char message[BLK_SIZE];
// read LSB to message[0] and MSB to message[1]
short my_int = (message[1] << 8) | message[0];
您的代码看起来是正确的,但你可以使用固有的C函数来确保你的协议是真正的平台独立的:
他希望针对他自己的协议进行特定的转换。 – 2010-07-05 16:08:13
看起来OK我 - 是什么让你认为它可能是不正确的? – 2010-07-05 15:55:39
是的,它看起来没问题。你应该为它写一个测试,它会告诉你在你的特定应用程序的上下文中它是否可以。 – 2010-07-05 15:55:46
@保罗:啊,我应该提到这一点。我不确定,因为:1)IIRC短不保证是16位。如果它的8或32发生了什么? 2)使用无符号字符操作并将其分配给短期工作,如预期的那样? – Marco 2010-07-05 16:01:07