大端模式:是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中
採用大端方式進行資料存放符合人類的正常思維,而採用小端方式進行資料存放利於計算機處理。到目前為止,採用大端或者小端進行資料存放,其孰優孰劣也沒有定論。
嵌入式系統開發者應該對little-endian和big-endian模式非常了解。採用little-endian模式的cpu對運算元的存放方式是從低位元組到高位元組,而big-endian模式對運算元的存放方式是從高位元組到低位元組。
16bit寬的數0x1234
在little-endian模式cpu記憶體中的存放方式(假設從位址0x4000開始存放)為:
記憶體位址
0x4000
0x4001
存放內容
0x34
0x12
在big-endian模式cpu記憶體中的存放方式則為:
記憶體位址
0x4000
0x4001
存放內容
0x12
0x34
32bit寬的數0x12345678
在little-endian模式cpu記憶體中的存放方式(假設從位址0x4000開始存放)為:
記憶體位址
0x4000
0x4001
0x4002
0x4003
存放內容
0x78
0x56
0x34
0x12
而在big-endian模式cpu記憶體中的存放方式則為:
記憶體位址
0x4000
0x4001
0x4002
0x4003
存放內容
0x12
0x34
0x56
0x78
在c語言
中,不同於結構體,共用體(聯合體)中的幾種不同型別的變數存放在同一段記憶體單元中。利用這一特點,可以用聯合體變數判斷arm
或x86
環境下,儲存系統是是大端還是小端模式。
#include "stdio.h"
int main()
c; //
聯合體的最大位元組數與其中所佔最大位元組的成員一樣大。
c.a=1;
if (c.b==1)
printf("it is little_endian!\n");
else
printf("it is big_endian!\n");
return 1;
}說明:
1 在c
中,聯合體(共用體)的資料成員都是從低位址開始存放。
2 若是小端模式,由低位址到高位址c.a
存放為0x01 00 00 00
,c.b
被賦值為0x01
;————————————————————————————
位址0x00000000 0x00000001 0x00000002 0x00000003
c.a 01 00 00 00
c.b 01
————————————————————————————
3 若是大端模式,由低位址到高位址
c.a存放為
0x00 00 00 01
, c.b
被賦值為
0x0 ;
————————————————————————————
位址 0x00000000 0x00000001 0x00000002 0x00000003
c.a 00 00 00 01
c.b 00
————————————————————————————
4 根據
c.b的值的情況就可以判斷
cpu的模式了,在
xp 環境下的
intel cpu
是小端模式,用
ads可測試
arm 920t
也是小段模式!
大 小端模式的測試
大端模式 是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中 小端模式 是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中。採用大端方式進行資料存放符合人類的正常思維,而採用小端方式進行資料存放利於計算機處理。到目前為止,採用大端或者小端進行資料存放,其...
大 小端模式的測試
大端模式 是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中 採用大端方式進行資料存放符合人類的正常思維,而採用小端方式進行資料存放利於計算機處理。到目前為止,採用大端或者小端進行資料存放,其孰優孰劣也沒有定論。嵌入式系統開發者應該對little endian和big end...
測試本機的大小端模式
1.什麼是大小端模式?區別?小端儲存模式和大端儲存模式 如數字0x1234,低位元組位是0x34,高位元組位是0x12。假設從位址0x4000處開始存放 記憶體位址 小端模式 little endian 大端模式 big endian 0x4000 0x34 0x12 0x4001 0x12 0x3...