如何判斷主機大小端

2021-07-02 03:59:19 字數 1520 閱讀 7316

(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...