[問題] big endian <-> little endian 轉換

看板C_and_CPP作者 (.)時間14年前 (2011/07/11 21:40), 編輯推噓2(204)
留言6則, 4人參與, 最新討論串1/3 (看更多)
如果我的阿拉伯數字是 12 那寫成 big endian就是 0001 0010 網路上找到的方法 inline void endian_swap(unsigned short& x) { x = (x>>8) | (x<<8); } 原本 0001 0010 0000 0000 0001 0010 (右移八位) OR 0001 0010 0000 0000 (左移八位) ______________________________________ = 0001 0010 0000 0000 0001 0010 ????? 老實說我完全不懂 他並沒有出現 0010 0001 希望能幫麻詳解 非常感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 71.202.107.175

07/12 06:06, , 1F
x>>8 後結果應該是0 才對,你沒移到.
07/12 06:06, 1F

07/12 06:08, , 2F
unsigned short 2bytes 應該是0xABCD 這樣子才對
07/12 06:08, 2F

07/12 06:09, , 3F
x=(x>>8) | (x<<8) => 0x00AB | 0xCD00 = 0xCDAB
07/12 06:09, 3F

07/12 06:10, , 4F
big/little endian是用byte為單位排列的
07/12 06:10, 4F
※ 編輯: sean72 來自: 71.202.107.175 (07/12 06:51)

07/12 06:54, , 5F
了解了 謝謝
07/12 06:54, 5F

07/12 07:44, , 6F
可以的話用 uint16_t 吧,就像 linux.die.net/man/3/htons
07/12 07:44, 6F
文章代碼(AID): #1E6stUNP (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1E6stUNP (C_and_CPP)