1、
本地位元組序
由 於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同. 位元組序分為小尾位元組序(little endian)和大尾位元組序(big endian), intel處理器大多數使用小尾位元組序, motorola處理器大多數使用大尾(big endian)位元組序;
小尾就是低位位元組排放在記憶體的低端,高位位元組排放在記憶體的高階。例如乙個4位元組的值為0x1234567的整數與高低位元組對應關係:
01 23
45 67
byte3
byte2
byte1
byte0
高位位元組--
à---------
à--------------
à低位位元組
將在記憶體中按照如下順序排放:
記憶體位址序號
位元組在記憶體中的位址
16 進製值
0x03
byte3
01 0x02
byte2
23 0x01
byte1
45 0x00
byte0
67 如果有char a[2]=,則直接轉換為unsigned short int之後的值為 *((unsigned short int *)aa) == 0x889c
大尾就是高位位元組排放在記憶體的低端,低位位元組排放在記憶體的高階。例如乙個4位元組的值為0x1234567的整數與高低位元組對應關係:
01 23
45 67
byte3
byte2
byte1
byte0
高位位元組--
à---------
à--------------
à低位位元組
將在記憶體中按照如下順序排放:
記憶體位址序號
位元組在記憶體中的位址
16 進製值
0x03
byte0
67 0x02
byte1
45 0x01
byte2
23 0x00
byte3
01 2、
網路位元組序
tcp/ip
各層協議將位元組序定義為大尾,因此tcp/ip協議中使用的位元組序通常稱之為網路位元組序。
3、 字串在記憶體中的儲存(intel系列)
字串和整數是相反的,是安字串的索引從低到高儲存到記憶體中的;
char s[4] =
「abc」;
a b
c /0
s[0]
s[1]
s[2]
s[3]
將在記憶體中按照如下順序排放:
記憶體位址序號
16 進製值
指標p的位置
0xbffeadf7
/0 p+3
0xbffeadf6
c p+2
0xbffeadf5
b p+1
0xbffeadf4
a p
int main(void)
輸出結果:
[netcool@hfinmsp2 demo]$ ./demo001
bffeadf4, bffeadf5, bffeadf6, bffeadf7
bffeadf4, bffeadf5, bffeadf6, bffeadf7
a, b, c,
4、整數陣列在記憶體中的儲存(intel系列)
同字串一樣,但是陣列裡的每乙個整數的儲存是按照小尾位元組序;
5、 linux系統中的處理方法
網路位元組序作為乙個標準位元組序,如果系統並沒有提供相關的轉換函式,我們可以通過以下4個巨集實現本地位元組序和網路位元組序的相互轉換:
htons():
將16位無符號整數從本地位元組序轉換成網路位元組序
htonl():
將32位無符號整數從本地位元組序轉換成網路位元組序
ntohs():
將16位無符號整數從網路位元組序轉換成本地位元組序
ntohl():
將32位無符號整數從網路位元組序轉換成本地位元組序
主機位元組序與網路位元組序
主機位元組序 不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 le little endian 最符合人的思維的位元組序 位址...
網路位元組序與主機位元組序
網路位元組序與主機位元組序 不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 le little endian 最符合人的思維的...
網路位元組序與主機位元組序
不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 le little endian 最符合人的思維的位元組序 位址低位儲存值的低...