作者shadow0326 (非議)
看板C_and_CPP
標題Re: [問題] endian
時間Thu Feb 2 18:46:33 2012
※ 引述《tropical72 (藍影)》之銘言:
: 回個文整理一下。
: 先說結論,C 語言用到 big/little 的時機很少,除了幾道面試題、網路程式之外,
: 沒見過。 bitwise operator 不需考慮 big/little。
(其餘恕刪)
討論一下我以前實務上曾經碰到要考慮endianness的一個case
假設有一份用 plain text 儲存的 IPv4 列表
文件內一行一個IP,例如長這樣
192.168.0.1
123.123.123.123
55.66.77.88
當時的需求是要做類似壓縮的處理
每個IP用4 bytes代表,以binary儲存
我當時的做法大概是這樣:
1. 先宣告
union UTransformer
{
unsigned int intdata;
unsigned char chardata[4];
} trans;
2. 從 input 檔案把數字一個一個讀進來,例如 192, 168, 0, 1, 123, ...
3. 令 trans.intdata = 讀進來的數字
4. if big endian: 把 trans.outdata[3] 寫入 output 檔案
else if little endian: 把 trans.outdata[0] 寫入 output 檔案
我相信也許還有更高效的做法
不過只是提一下以前曾經碰到需要處理endianness的狀況而已
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.65.124
推 tropical72:推一個 ^^ 02/02 18:52
推 firejox:恩...但這世界上不是只有Big和little(?) 02/02 18:57
→ shadow0326:所以我用 else if 不是用 else XD 02/02 18:59
→ shadow0326:事實上我當時還加了 else 就終止 02/02 19:00
→ shadow0326:話說回來那隻程式也沒有在little以外的平台跑過就是了 02/02 19:00
→ eight0:ww 感覺壓縮算法比較會碰到 之前寫RLE好像也有這個問題 02/02 19:30
推 azureblaze:寫binary進檔案然後開hexEditor去檢查的時候也會用到XD 02/02 23:02
→ james732:以前用遊戲修改大師去改記憶體的時候就會用到 (喂) 02/02 23:08