如何判斷CPU是大端還是小端模式

ARM體系中,每個字單元包含4個字節單元或者兩個半字單元。在字單元中,4個字節哪一個是高位字節,哪一個是低位字節則有兩種不同的格式:big-endian(MOTO)little-endian(INTEL)格式。在小端模式中,低位字節放在低地址,高位字節放在高地址;在大端模式中,低位字節放在高地址,高位字節放在低地址。

C語言中,不同於結構體,共用體(聯合體)中的幾種不同類型的變量存放在同一段內存單元中。利用這一特點,可以用聯合體變量判斷ARMx86環境下,存儲系統是是大端還是小端模式。

#include "stdio.h"
int main()
{
  union w
 {
  int a;  //4 bytes
  char b; //1 byte
 } c;
  c.a=1;
  if (c.b==1)
  printf("It is Little_endian!\n");
  else
  printf("It is Big_endian!\n");
  return 1;
}
說明:
 c中,聯合體(共用體)的數據成員都是從低地址開始存放。
 若是小端模式,由低地址到高地址c.a存放爲0x01 00 00 00c.b被賦值爲0x01

  ————————————————————————————

   地址 0x00000000 0x00000001 0x00000002 0x00000003

   c.a  01         00         00         00

   c.b  01         00        

  ————————————————————————————  
 若是大端模式,由低地址到高地址c.a存放爲0x00 00 00 01c.b被賦值爲0x0

  ————————————————————————————

   地址 0x00000000 0x00000001 0x00000002 0x00000003

   c.a  00         00         00         01

   c.b  00         00                 

  ————————————————————————————  


 根據c.b的值的情況就可以判斷cpu的模式了,現在XP環境下的intel CPU是小端模式,不信你可測試下!

發佈了8 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章