我仍在研究正常工作的ICMP監聽器,並且對如何處理'endianness'感到困惑。我的第一種方法是將數據從緩衝區中取出到合適的(數組最初)字段(uint等)中,然後在將數據傳遞給相應的BitConverter成員之前顛倒字節順序。雖然它有效,但它不是很優雅。如何處理'Endianness'
第二種方法是準備由二維數組驅動的整個緩衝區,它包含需要調整的字段的位置和長度。這也起到了作用,還有一個額外的好處,即現有的代碼不需要改變,但是在可讀性方面缺乏(嚴重)。
我正在努力理解當前可用的新編程環境(特別是.Net和C#),對於1975年存在的問題仍未得到適當處理,我感到非常驚訝。我爲(IBM)個人電腦開發了第一個(ISA)網卡(針對以太網1.0,基於Motorola 68000 CPU),我清楚地記得所涉及的問題;不僅僅是多字基本類型,而且所有數據都是不同的'endiannnes'(然後是16位字),這有效地消除了'DMA'數據的可能性。
我認爲網絡適配器扮演一個非常小的角色來調整適合其環境的數據,但這樣解決問題似乎不是太大的問題。 (?)
底線;我不能相信我是唯一一個揹負這一責任的人,我真誠希望有人提出一個比我現在使用的解決方案更好的解決方案。
(本文編譯它與谷歌的幫助下翻譯(我敢荷蘭))
不僅你有這個問題: - 參見http://stackoverflow.com/questions/217980/c-little-endian-or-big-endian好。 – Vlad 2010-11-06 11:49:31