討論大小端的問題就是在討論低位元組儲存在低位址還是高位址的問題
大小端記憶方式:
例題:unsigned int a= 0x1234; unsigned char b=*(unsigned char *)&a
; 在32位大端模式處理器上變數b等於()?
解析:
unsigned int a= 0x1234
的32位完全表示是0x00001234
,
由低位址到高位址依次為(假設低位址為0x4000),則其在大端的分布如下:
0x4000 0x4001 0x4002 0x4003
00 00 12 34
同理如果是小端則值為:0x34
判斷cpu大小端測試**1.
int checkcpu(void)
c;
c.a = 1;
return (c.b == 1);
}
由於union變數的位址和它的各成員的位址都是同一位址,並且union的存放順序是所有成員都從低位址開始存放的,所以可以利用這兩個特點來檢測cpu是大端模式還是小端模式。
如果cpu是小端模式的話,則c.a從低位址處開始存放的就是低位元組資料,也就是01,所以 c.b就會被賦值為0x01;
如果是大端模式的話,則c.a從低位址處開始存放的就是高位元組資料,也就是0x00,所以c.b就會被賦值為0x00。
這樣的話,根據c.b的賦值情況就可以看出cpu是小端模式還是大端模式了。
關於大小端的經典問題
int ptr1 int a 1 可以這樣理解 a 1相當於a 5,相當於跨過了整個數值,然後ptr1 1 輸出其前乙個,就是結果5了。int ptr2 int int a 1 這個可以這樣理解 這個裡面 int a 1,a是指的乙個位址00h,當然位址也是由資料表示的,int a就是吧這個位址資料...
關於大小端問題的整理
首先大小端問題的 是由於作業系統中儲存是以位元組為單位儲存的,那麼大於乙個位元組的型別int long等型別自然就會涉及到位元組之間排序的問題。一 概念 1 大端模式 所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模...
大小端問題
對於位數大於 8位的處理器,例如 16位或者 32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。例如乙個 16bit 的short型x 在記憶體中的位址為 0x0010,x 的值為0x1122 那麼0x11 為高位元組...