位元組序的理解
阿新 • • 發佈:2019-01-14
編者:李國帥
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。