請寫一個C函數,若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1
解答:
- int checkCPU()
- {
- union w{
- int a;
- char b;
- } c;
- c.a = 1;
- return(c.b ==1);
- }
剖析:嵌入式系統開發者應該對Little-endian和Big-endian模式非常瞭解。採用Little-endian模式的CPU對操作數的存 放方式是從低字節到高字節,而Big-endian模式對操作數的存放方式是從高字節到低字節。例如,16bit寬的數0x1234在Little- endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)爲:
內存地址0x40000 x4001
存放內容0x34 0x12
而在Big-endian模式CPU內存中的存放方式則爲:
內存地址0x40000 x4001
存放內容0x12 0x34
判斷CPU是大端還是小端?明白大端和小端的區別,實現起來就非常簡單:
- #include <stdio.h>
- int main(void)
- {
- union u_endian{ //union是聯合體,各變量之間共享內存
- short s;
- char c[2];
- }u;
- if(sizeof(short) == 2){
- u.s = 0x0102;
- if(u.c[0] == 1 && u.c[1] == 2){
- printf("big enidan\n");
- }else if(u.c[0] == 2 && u.c[1] == 1){
- printf("little endian.\n");
- }
- return 0;
- }
- }