1. 程式人生 > >位元組序的理解

位元組序的理解

編者:李國帥

qq:9611153 微信lgs9611153

時間:2012/02/28 08:35:40

背景原因:

由於不同的cpu或者作業系統的主機序不一樣,導致在讀寫檔案或者檔案傳送的時候,使用的規則不一樣。

 

問題相關:

 

多位元組資料型別在不同的cpu上可能讀寫方式不同。

同時不同編譯器對bitfield的處理方式也可能不一樣。

所以資料結構中的int型和short型變數需要在網路的兩頭先變成相同的格式傳送,接收的時候再從相同的格式轉變為本機格式進行處理。

而且,資料中不要使用bitfield。

 

舉例

訊息頭     起始碼     識別符號     內容格式         訊息長度

8Bytes      2 Byte       1Bytes      1Byte                 4 Bytes

 

識別符號     1個位元組,從高至低位(7?0)標識如下:

Bit 7 – Bit 3:保留

Bit 2位:是否加密:1-訊息加密,0-訊息未加密

Bit 1位:是否壓縮:1-訊息壓縮,0-訊息未壓縮

Bit 0位:訊息是否做和校驗:1-訊息有和校驗,0-訊息未做和校驗

 

識別符號欄位在windows和mac環境中編譯之後的順序是不同的,雖然都可能是x86機器。暫時不做修改。

 

按照約定,不管對於任何的cpu和作業系統,都知道網路上使用什麼格式(網路上使用big-endian格式)。

這樣,網路自身使用什麼格式對主機來說是透明的,不需要管理。這裡僅僅把網路順序作為cpu中自序識別的一個參考。

對於多位元組欄位,傳送的時候使用htons或者htonl。接收的時候使用ntohs或者ntohl。