測試機器大小端儲存的方法

2021-08-03 21:46:31 字數 1699 閱讀 1063

小端模式(little-endian),是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這種儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低,和我們的邏輯方法一致。

大端模式(big-endian),是指資料的高位元組,儲存在記憶體的低位址中,而資料的低位元組,儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;

分大小端模式儲存的原因:因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為 8bit。但是在c語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對於位數大於 8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如何將多個位元組安排的問題。因此就出現了大端儲存模式和小端儲存模式。例如:乙個16bit的short型x,在記憶體中的位址為0x0010,x的值為0x1122,那麼0x11為高位元組,0x22為低位元組。對於大端儲存模式,就將0x11放在低位址中,即0x0010中,0x22放在高位址中,即0x0011中。小端模式,剛好相反。我們常用的x86結構是小端模式,而keil c51則為大端模式。很多的arm,dsp都為小端模式。有些arm處理器還可以由硬體來選擇是大端模式還是小端模式。

測試機器大小端的方法:聯合體方式和指標方式。

【例】測試int num = 1;在機器中是大端儲存模式還是小端模式

解題思路:「int num = 1;」的二進位制寫法是,如圖1:

圖1 整型1的二進位制寫法

「int num = 1;」在記憶體中的儲存方式,如圖2:

圖2 整型1在記憶體中的儲存方式

已知整型1在記憶體中以4個位元組的方式儲存,char型以1個位元組方式儲存。當將int型強制轉換為char型指標,那麼char型指標中儲存則是int型num的第乙個位元組。如果空間中儲存的是1,那麼就是小端儲存模式,否則就是大端儲存模式。(聯合體解決的思路相似)

//方法一:指標方式

#define _crt_secure_no_warnings 1

#include

# include

int check_sys()

else

}int main()

else

system("pause");

return

0;}

//方法二:聯合體方式

#include 

#include

typedef

union test

test;

int check_sys()

; test.i = 1;

return test.c;

}int main(void)

else

system("pause");

return

0; }

如何測試機器的大小端儲存

大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 這和我們的閱讀習慣一致。小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這...

如何測試機器的大小端

一 大小端 1 為啥會有大小端 在計算機系統中以位元組為單位,每個位址單位都有乙個位元組 乙個位元組8個bit位 在c語言中,有char 8bit short 16bit long 32bit,具體看編譯器 對於位數大於8的處理器,不如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然...

判斷機器大小端的方法

之前就簡單聽說過電腦的大小端之分,還有通過程式來判斷你的電腦是大端還是小端。今天在學習網路的時候又接觸了大小端,這裡就再給大家詳細的介紹一下電腦的大小端。首先,介紹一下什麼是大端什麼是小端。大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點...