在不同平台設計程式時常有機會遇到 endian的問題。
而endian的不同要看處理器本身是如何implement的,這次的重點不在這,就不贅述。
這兩天在處理 endian 的轉換,其實也就只是 bit 位置的不同而已,用 &, |, <<, >>就可以輕鬆解決,但在檢查 checksum 時卻出現問題。
猜測:
可能是因為在不同平台,所以他"一次"處理的位元數也不同。目前處理器大多都是32 bit的,而embedded上則不一定,但這次用的是 8 bit的。如此一來在計算 checksum時就會出現不符的問題。
解法:
以較少 bit 平台為主(不然抓到多的也是問題),其餘部份就用 mask處理掉,以這次為例,利用 mask = 0x000000ff 來做,只處理最後 8個 bit的值,其餘忽略不看,用以解決此次問題。
風花水月六十石
15 年前
沒有留言:
張貼留言