網絡上傳輸的數據採用大端方式,而存儲在x86平臺上數據採用小端方式,因此要注意轉換。
htonl()、htons()、ntohl()、ntohl()函數的使用。
網絡字節順序與本地字節順序之間的轉換函數:
之所以需要這些函數是因爲計算機數據表示存在兩種字節順序:NBO與HBO
網絡字節順序NBO(Network Byte Order):
按從高到低的順序存儲,在網絡上使用統一的網絡字節順序,可以避免兼容性問題。
主機字節順序(HBO,Host Byte Order):
不同的機器HBO不相同,與CPU設計有關,數據的順序是由cpu決定的,而與操作系統無關。
如 Intel x86結構下,short型數0x1234表示爲34 12, int型數0x12345678表示爲78 56 34 12
如IBM power PC結構下,short型數0x1234表示爲12 34, int型數0x12345678表示爲12 34 56 78
如果處理不好字節序的問題,接受得到的數據就不正確。
所以獲取到char型之外的數據應用ntohl()把他轉換成本地字節順序進行操作。