作者adrianshum (Alien)
看板C_and_CPP
標題Re: [問題] big endian <-> little endian 轉換
時間Tue Jul 12 10:55:33 2011
※ 引述《sean72 (.)》之銘言:
: 如果我的阿拉伯數字是 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
: 希望能幫麻詳解
: 非常感謝
你的第一句就有問題了...
12 的二進位是 1100.
我不知道你從那裡學來是一個一個數字拆開來搞.
(這種數字表示法有特別稱呼, 叫 packed decimal,
不過你現在的情況應該不是在搞這些...)
假設 short 是 2 byte 長.
12 big endian 就是
0000 0000 0000 1100
0000 0000
0000 0000 >> 8
0000 1100 0000 0000 << 8
-------------------------------------------
0000 1100 0000 0000
你順便去搞清楚 bitwise shift 意思吧. 你原文也搞錯了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.238.156.185
※ 編輯: adrianshum 來自: 61.238.156.185 (07/12 10:56)
→ angleevil:<m.m>謝謝 07/12 10:57
→ firejox:可能那是16進位的12 XD 07/12 11:20
→ sean72:了解 謝謝 07/12 11:49
→ sean72:你提醒之後我才發現我發文時候把阿拉伯數字和hex弄混了 07/12 11:58
→ adrianshum:那麼其實你想說的數字其實是 18 (0x12) ? 07/12 15:56