位元組序和網路位元組序

來源:互聯網
上載者:User
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
  大尾就是高位位元組排放在記憶體的低端,低位位元組排放在記憶體的高端。例如一個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){     char s[4] = "abc";     char *p = s;      printf("%02x, %02x,    %02x,    %02x/n", &s[0], &s[1], &s[2], &s[3]);     printf("%02x, %02x,    %02x,    %02x/n", p, p+1, p+2, p+3);     printf("%c,   %c, %c, %c/n", s[0], s[1], s[2], s[3]);             return 0;}輸出結果:[netcool@HFINMSP2 demo]$ ./demo001bffeadf4,       bffeadf5,       bffeadf6,       bffeadf7bffeadf4,       bffeadf5,       bffeadf6,       bffeadf7a,      b,      c,4       整數數組在記憶體中的儲存(intel系列)同字串一樣,但是數組裡的每一個整數的儲存是按照小尾位元組序; 5       linux系統中的處理方法網路位元組序作為一個標準位元組序,如果系統並沒有提供相關的轉換函式,我們可以通過以下4個宏實現本地位元組序和網路位元組序的相互轉換:htons():將16位不帶正負號的整數從本地位元組序轉換成網路位元組序htonl():將32位不帶正負號的整數從本地位元組序轉換成網路位元組序ntohs():將16位不帶正負號的整數從網路位元組序轉換成本地位元組序ntohl():將32位不帶正負號的整數從網路位元組序轉換成本地位元組序 
註:1、網路與主機位元組轉換函式:htons ntohs htonl ntohl (s 就是short l是long h是host n是network)2、不同的CPU上運行不同的作業系統,位元組序也是不同的,參見下表。處理器     作業系統     位元組排序Alpha     全部     Little endianHP-PA     NT     Little endianHP-PA     UNIX     Big endianIntelx86     全部     Little endian <-----x86系統是小端位元組序系統Motorola680x()     全部     Big endianMIPS     NT     Little endianMIPS     UNIX     Big endianPowerPC     NT     Little endianPowerPC     非NT     Big endian   <-----PPC系統是大端位元組序系統RS/6000     UNIX     Big endianSPARC     UNIX     Big endianIXP1200 ARM核心     全部     Little endian 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.