大端格式:ide
在這種格式中,字數據的高字節存儲在低地址中,而字數據的低字節則存放在高地址中,如圖2.1所示: 函數
小端格式:post
與大端存儲格式相反,在小端存儲格式中,低地址中存放的是字數據的低字節,高地址存放的是字數據的高字節。如圖2.2所示:測試
請寫一個C函數,若處理器是Big_endian的,則返回0;如果Little_endian的,則返回1spa
解答: orm
int checkCPU( )blog
{ 內存
{ ci
union w 開發
{
int a;
char b;
} c;
c.a = 1;
return(c.b ==1);
}
}
剖析:
嵌入式系統開發者應該對Little-endian和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 |
聯合體union的存放順序是全部成員都從低地址開始存放。
=============== 呵呵 仍是附上 另外一段代碼吧,摘自一個開源項目 ====
int big_endian (void)