1、什麼是大小端?
大端:資料的低位儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址處
小端: 資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址處
2、為什麼要有大小端?
為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為8bit。但是在c語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對於位數大於8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如何將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。
3、舉例說明
乙個 16bit 的 short 型 x ,在記憶體中的位址為 0x0010 , x 的值為 0x1122 ,那麼 0x11 為高位元組, 0x22為低位元組。對於大端模式,就將 0x11 放在低位址中,即 0x0010 中, 0x22 放在高位址中,即 0x0011 中。小端模式,剛好相反。我們常用的 x86 結構是小端模式,而 keil c51 則為大端模式。很多的arm,dsp都為小端模式。有些arm處理器還可以由硬體來選擇是大端模式還是小端模式。
4、判斷大小端
(1)指標的方式
#include
#include
#pragma warning(disable:4996)
intmain()
else
system
("pause");
return0;
}
(2)聯合
#include
#include
#pragma warning(disable:4996)
union endian
en;int
main()
else
system
("pause");
return0;
}
大小端的判斷
在計算機系統中,我們以位元組為儲存單位,每個位址的單元都是對應的乙個位元組,乙個位元組為8bit.在c語言中,不僅僅是乙個位元組來儲存資料,除了乙個位元組的char,還有兩個位元組的short,四個位元組的int,另外對於位數大於8位的處理器,例如32位處理器。由於暫存器的寬度大於乙個位元組的長度,...
判斷大小端
int i 1 char p char i if p 1 printf 1 else printf 2 大小端儲存問題,如果小端方式中 i佔至少兩個位元組的長度 則i所分配的記憶體最小位址那個位元組中就存著1,其他位元組是0.大端的話則1在i的最高位址位元組處存放,char是乙個位元組,所以強制將c...
大小端判斷
思路 聯合體union的存放順序是所有成員都從低位址開始存放,利用該特性就可以輕鬆地獲得了 cpu對記憶體採用little endian還是big endian模式讀寫。給出c linux其實也差不了多少 include using namespace std union judge judge f...