1.為什么存在大小端模式
計算機系統中,每個地址單元對應一個字節(8bit),一種數據類型的數據可能占用若干字節。如何安排這種數據類型中的各個字節,哪個字節在低地址哪個在高地址,以及一個字節中的各個比特的排列,這就牽涉到大小端模式。也就是大家常說的字節序和比特序問題。字節序和比特序一般是一致的,要么都是大端,要么都是小端。
2.什么是大端和小端
大端模式:低位(字節/比特)放在高地址中,高位(字節/比特)放在低地址中。
小端模式:低位(字節/比特)放在低地址中,高位(字節/比特)放在高地址中。
高位和地位是對於我們正常閱讀和書寫來說,最開始是高位,例如int型數0x1234,0x12是字節的高位,0x34是字節的低位。
根據以上規則,我們給出在大、小端序系統中整數0x0a0b0c0d的表示方式。
對於大端系統:
byte addr 0 1 2 3
bit offset 01234567 01234567 01234567 01234567
binary 00001010 00001011 00001100 00001101
hex 0a 0b 0c 0d
對於小端系統:
byte addr 3 2 1 0
bit offset 76543210 76543210 76543210 76543210
binary 00001010 00001011 00001100 00001101
hex 0a 0b 0c 0d
3. 檢測大小端
聯合體的存放順序是所有成員都從低地址開始存放,利用該特性可以輕松獲得當前系統采用大端還是小端模式
BOOL IsBigEndian() { union NUM { int a; char b; }num; num.a = 0x1234; if( num.b == 0x12 ) { return TRUE; } return FALSE; }
4.常見的大小端
一般操作系統都是小端模式;而通訊協議是大端模式;java和平台無關,默認是大端模式
常見的cpu的大小端:
大端:PowerPC、IBM、Sun
小端:x86
ARM既可以工作在大端模式,也可以工作在小端模式