現在的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 最符合人的思維的...