字節序
阿新 • • 發佈:2018-04-14
字節序 大小端 大端字節序 小端字節序 網絡字節序 字節序是說整型數字在內存地址中存儲的順序,分為大端字節序、小端字節序兩種:
* 大端字節序: 最高有效位存儲於最低地址位,最低有效位存儲於高地址位,既存儲順序與所見順序相同
* 小端字節序: 最高有效位存儲於最高地址位,最低有效位存儲於最低地址位
字節序的運用分為主機字節序和網絡字節序:
* 主機字節序: 根據主機類型不同字節序也就不同,我們常用的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
順序和介紹的字節序順序相同
字節序