linux下的位元組序轉換

來源:互聯網
上載者:User
 如果你要嘗試編寫linux環境下的網路程式,那麼一定會碰到這個位元組序問題,

與其每次碰到的時候都去尋找資料,不如一勞永逸,所以就做了一個簡圖,可以

作為隨手查看的資料,這裡所說的均在自己的機器上驗證過,但也都是個人的理解,

難免有誤。

         位元組序,就是電腦在安排資料類型儲存的時候,怎樣儲存資料的高低位。其實這

一般和作業系統沒有關係,而是和電腦的硬體架構有關,具體的說,就是CPU的設計

有關,英特爾的晶片和AMD的晶片集都是使用的小端位元組序(最低位元組優先儲存),

但是有些特別的CPU就不是這樣處理的。它們可能使用大端位元組序(最高位元組優先儲存),

這些在不同電腦上使用的位元組序稱為主機位元組序。

         另外應明確,電腦CPU可以支援的最基本資料存放區是一個位元組,資料位元的操作使用

了特殊的寄存器。所以涉及到位元組序問題的資料類型,一定是整位元組的倍數,不可能是4bits。

也不可是一個位元組,六進位表示起來就是:一個資料0XAB,不可能使用位元組序轉換為0XBA。

        為了在不同架構的電腦之間通訊,那麼網路上的位元組序就必須統一,網路位元組序使

用的是大端位元組序(最高位元組優先儲存),所以我們通常要在程式中做位元組序轉換,但是

為了方便程式的移植,基本上涉及到這類操作的地方都要進行位元組序轉換。     位元組序的轉

換,是當程式在系統上動態運行時進行的,它會根據當前CPU的運行模式來決定轉換還是

不轉換,所以使用位元組序轉換函式時非常必要的,這讓我們的程式移植很容易。

       給出了很詳細的處理函數和相關的資料變化:

圖中給出了各種資料中常見的名詞,它們其實都是指一個東東啊!       對於,資料在網路中資料是怎麼儲存的,筆者這樣理解,在網關,或者其他網路裝置中,在進行資料過濾等處理時可能存在不同的位元組序,但是到達我們網卡的資料一定是按照網路位元組序來儲存資料的,當NIC收到一個資料包的時候,它申請一塊記憶體區,然後存入資料,這時候資料都是按照網路位元組序來儲存的,當我們的軟體進程要讀取這裡的資料的時候,CPU將找到地址,並根據指令來讀取一定的位元組數,這個時候,如果我們沒有進行位元組序轉換,並且主機位元組序與網路位元組序不同,那麼問題就出現了,對於CPU來說,假設它一貫(也只能,設計的時候就確定了)從高地址讀取並作為資料的高位,那麼一切資料都是錯誤的了,所以,轉換函式又開闢了一塊記憶體,並將資料的序列完全翻轉過來,這樣CPU來讀這塊資料就是正確的了。 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.