我正在使用專有協議來傳輸整數作爲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