Re: [問題] 判斷Big Endian系統 or Little Endian系統

看板C_and_CPP作者 (恋さや)時間15年前 (2010/08/27 18:30), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/4 (看更多)
※ 引述《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
突然想到之前討論串中的union也可以做,但是比較麻煩
08/28 10:12, 1F
文章代碼(AID): #1CU0HUdf (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CU0HUdf (C_and_CPP)