(1)何為大小端
大端:是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中
小端:是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中
(2)為什麼會有大小端
這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為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處理器還可以由硬體來選擇是大端模式還是小端模式。
大端:是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中
小端:是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中
(2)為什麼會有大小端
這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為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處理器還可以由硬體來選擇是大端模式還是小端模式。
(3) 用**檢視大小端
方式一:
unsigned short a = 0x1234;
char *p = &a;
printf("%c\n",p);//如果是0x12則是小端,為0x34則為大端
方式二:
union num //聯合體 union 的存放順序是所有成員都從低位址開始存放
num;
num.a = 0x1234;
if( num.b == 0x12 )
printf("little endian");
如何判斷大小端
以下是兩種用來檢測系統是大端模式還是小端模式的測試 include int checksystem c c.i 1 if c.ch 1 else int main include include intmain int argc,char argv un un.s 0x0102 if sizeof ...
如何判斷大小端模式?
大端模式就是低位元組儲存在高位址處而高位元組儲存在低位址處 小段模式就是低位元組儲存在低位址處而高位元組儲存在高位址處 根據這個特性,假設我們初始化了乙個int變數i為0x12345678,其位址為0x100,根據定義在小端模式下 0x100乙個位元組內的值為0x78,類推0x101 0x56,0x...
如何判斷系統大小端序
使用聯合體來判斷大小端序。聯合體有個特點剛好可以被利用,聯合體的成員共用乙個空間。大端序 大端模式 是指資料的低位儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址中。小端序 小端模式 是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中。include stdio.h i...