所謂的大端小端就是cpu在儲存資料的時候是從高位址開始儲存還是低位址開始儲存。例如在sizeof(int) = 2的系統中,1 + (2 << 8)= 1 + 512 = 513,我們把這個值賦值給int ntemp = 1 + (2 << 8)。我們假定系統分配給變數ntemp的位址空間為:0x0000ff08到0x0000ff09,那麼0x0000ff08開始的8個位為第乙個位元組的儲存空間,0x0000ff09開始的8個位為第二個位元組的儲存空間。
如果cpu為大端,記憶體中的儲存分配則為:
0x0000ff08:00000010(二進位制) -> 2 (十進位制)
0x0000ff09:00000001(二進位制) -> 1 (十進位制)
如果cpu為小端,記憶體中的儲存分配則為:
0x0000ff08:00000001(二進位制) -> 1 (十進位制)
0x0000ff09:00000010(二進位制) -> 2 (十進位制)
那麼如何判斷系統cpu是大端還是小端呢???
我們可以利用c中的的共用體union和char型別,共用體的資料成員是共享儲存空間的,而char型別在任何系統中都是乙個位元組。
我們可以定義乙個共用體
union
;然後對共用體的sum進行賦值,只要判斷element各個元素的值就可以知道系統cpu為大端,還是小端。因為共同體是共享儲存的,我們這裡假定測試系統sizeof(int)為2,那麼element[0]的內容為sum儲存空間中的第乙個位元組的內容,element[1]的內容為sum儲存空間的第二個位元組的內容。如果cpu為小端則表示式(int)(element[0]) + ((int)elememt[1] << 8)的值將等於sum。如果cpu的大端則表示式(int)(element[1]) + ((int)elememt[0] << 8)的值將等於sum。
下面給出可移植的**來判斷系統的cpu是大端還是小端。
#include
#include
unionbigorsmall
;boolcheckbigorsmall()
intsum = 0;
for(i = 0; i < nlen; ++i)
for(i = 0; i < nlen; ++i)
else
} strtemp[8] = 0;
printf("%s(bin) -> %d(dec)\n", strtemp, bigorsmall.element[i]);
}if(sum == bigorsmall.sum)
else
}intmain()
else
return0;
}
如何判斷CPU是大端還是小端模式
如何判斷cpu是大端還是小端模式 2010 12 03 23 35 25 分類 c c 在arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低...
如何判斷CPU是大端還是小端模式
在arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低位位元組放在低位址,高位位元組放在高位址 在大端模式中,低位位元組放在高位址,高位位元組...
C語言判斷cpu是大端還是小端。
1.大端模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中 小端模式相反 2.為什麼有大小端之分?因為在計算機系統中,儲存是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組 8bit。在c語言中除了8bit的char之外,還有16bit的short型,32b...