我通過網絡數據包接收短int,這意味着它將以網絡字節順序(大端)的2字節形式出現。在C中將2個字節組合成一個短int int
我想將我收到的兩個字節組合到我的機器上的短整型變量中,這是一種小端字節順序。
例子:
short int test = 400; //0x190 in big endian, 0x9001 in little endian
char testResponse[2] = {0x01, 0x90};
//here is my attempt
short int result = testResponse[1] << 8 | testResponse[0];
printf("%d\n", result); //-28671 when expecting 400
任何幫助,將不勝感激!
你有什麼問題? – Olaf
結合這兩個數字的方式似乎是一個8位左移比OR,但這似乎並沒有給出正確的結果,所以我想知道是否有人知道我的位算術是錯誤的。 –
C中沒有「8位左移」。如果有,則移位計數爲'8'會引起未定義的行爲。你很可能受到整數的促銷活動,瞭解它們!並使用固定寬度的無符號類型。 'char'不保證是無符號的,也不保證有8位。根據您在現在刪除的答案中的評論:我們需要所有相關信息。或者你說我的代碼是正確的。 – Olaf