Linux 主機位元組序與網路位元組序

2021-10-04 03:22:22 字數 1305 閱讀 9992

現在的cpu累加器一次能夠裝載至少4個位元組的乙個整數,那麼位元組在記憶體中的排列順序不同,導致累加器使用的結果不同,這就是位元組序問題 。

例如:我們儲存乙個int型別的數字;int a = 1;大端位元組序

整數的高位位元組存放在記憶體的低位址位。

小端位元組序

整數的低位位元組存放在記憶體位址的低位址為。

測試主機為大端還是小端

#include

void

test()

test;

test.a =

0x0102;if

(b[0]==

1&& b[1]

==2)printf

("大端\n");

else

if(b[0]

==2&& b[1]

==1)printf

("小端\n");

else

printf

("未知\n");

}

由於不同主機之間的位元組序儲存方式不同,這就導致,如果傳送方與接收方主機位元組序儲存方式不同,所以在通訊時,需要先將主機位元組序進行統一,這就是主機位元組序裝換為網路位元組序。

#include

//長整型主機位元組序轉換為網路位元組序

unsigned

long

inthtonl

(unsigned

long

int hostlong)

;//短整型主機位元組序轉換為網路位元組序

unsigned

short

inthtons

(unsigned

short

int hostshort)

;//長整形網路位元組序裝換為主機位元組序

unsigned

long

intntohl

(unsigned

long

int hostlong)

;//短整形網路位元組序裝換為主機位元組序

unsigned

short

intntohs

(unsigned

short

int hostshort)

;

主機位元組序與網路位元組序

主機位元組序 不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 le little endian 最符合人的思維的位元組序 位址...

網路位元組序與主機位元組序

1 本地位元組序 由 於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 bi...

網路位元組序與主機位元組序

網路位元組序與主機位元組序 不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 le little endian 最符合人的思維的...