Re: [問題] 判斷Big Endian系統 or Little Endian系統
※ 引述《TopStephen (給我21天的時間)》之銘言:
: ( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
: ( 未必需要依照此格式,文章條理清楚即可 )
: 遇到的問題: (題意請描述清楚)
: 寫一段程式判斷目前系統是 Big Endian or Little Endian
: 小弟很直覺寫了下面這一段,但找不到Big Endian的機器可以驗證
: bool IsBigEndian()
: {
: char val = 0x1234;
: return (val==0x12);
: }
: 這麼方法不知道行不行得通?
: 有人可以幫忙驗證這個方法嗎?
: 感謝!
────────────────────────────────
首先來看一下高低位元的分布示意圖(記憶體位址大小向右遞增,▇▇代
表val。):
Big Endian: 12 34
▇▇
Little Endian: 34 12
其實不管是哪種layout,因為數值大到char無法容納,val
存的實際值只能為
0x1234 % 256 = 0x34
你的函式回傳結果恆為假。
────────────────────────────────
如果要測試,我推薦用大於1Byte的型態,函式變成這樣:
bool IsBigEndian()
{
short val = 0x1234;
char *p = reinterpret_cast<char*>(&val);
return (*p==0x12);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
→
08/28 10:12, , 1F
08/28 10:12, 1F
討論串 (同標題文章)