1. 程式人生 > >字節序

字節序

字節序 大小端 大端字節序 小端字節序 網絡字節序

字節序是說整型數字在內存地址中存儲的順序,分為大端字節序、小端字節序兩種:

* 大端字節序: 最高有效位存儲於最低地址位,最低有效位存儲於高地址位,既存儲順序與所見順序相同

* 小端字節序: 最高有效位存儲於最高地址位,最低有效位存儲於最低地址位


字節序的運用分為主機字節序和網絡字節序:

* 主機字節序: 根據主機類型不同字節序也就不同,我們常用的x86類型的機器字節序為小端字節序

* 網絡字節序: 固定為大端字節序


舉個例子,如果我們需要存儲一個整型數字,比如0x12345678分別在內存中的順序如下:

技術分享圖片


寫了個小腳本在測試機測一下結果相同:

#include <stdio.h>
#include <arpa/inet.h>
int main(void)
{
        unsigned int a = 0x12345678;
        unsigned char *b = (unsigned char *)&a;
        printf("%0x %0x %0x %0x\n",b[0],b[1],b[2],b[3]);
        unsigned int c = htonl(a);  //htonl 是字節序轉換函數,轉為網絡字節序
        b = (unsigned char *)&c;
        printf("%0x %0x %0x %0x\n",b[0],b[1],b[2],b[3]);
        return 0;
}

運行之後打印的結果為:

78 56 34 12

12 34 56 78

順序和介紹的字節序順序相同

字節序