大小端定義

2021-06-03 07:42:59 字數 1709 閱讀 6121

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

例子:

0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000

0000440: b484 6c4e 004e ed00 0000 0000 0100 0000

在大端模式下,前16位應該這樣讀: e684

記憶方法: 位址的增長順序與值的增長順序相反所謂的小端模式,是指資料的高位儲存在記憶體的高

位址中,而數 據的低位儲存在記憶體的低位址中,這種儲存模式將位址的高低和

資料位權有效地結合起來,高位址部分權值高,低位址部分權值低,和我們的邏輯方法一致。

例子:

0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000

0000440: b484 6c4e 004e ed00 0000 0000 0100 0000

在小端模式下,前16位應該這樣讀: 84e6

記憶方法: 位址的增長順序與值的增長順序相同為什麼會有大小端模式之分呢?這是因為在

計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為 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處理器還可以由硬體來選擇是大端模式還是小端模式。下面這段**可以用來測試一下你的編譯器是大端模式還是小端模式:short int x;

char x0,x1;

x=0x1122;

x0=((char*)&x)[0]; //低位址單元

x1=((char*)&x)[1]; //高位址單元

若x0=0x11,則是大端; 若x0=0x22,則是小端......

上面的程式還可以看出,資料定址時,用的是低位位元組的位址。

static union endian_test = };

#define endianness ((char)endian_test.l)

(如果endianness=』l』表示系統為little endian,為』b』表示big endian )。

[1]int checkcpu()

c; c.a = 1;

return (c.b == 1);

} }

2023年8月27日17:38:15 新增

測試大小端l

#include

int main(void)

else

return0;

} 執行環境:linux root-desktop 2.6.32-24-generic #39-ubuntu smp wed jul 28 06:07:29 utc 2010 i686 gnu/linux

mysql 大小端 大小端定義

大小端的定義 big endian和little endian的定義如下 little endian就是低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的高位址端。big endian就是高位位元組排放在記憶體的低位址端,低位位元組排放在記憶體的高位址端。舉乙個例子,比如數字0x12 34 ...

大小端轉換定義結構體的技巧

首先,不管是哪一種資料存放方式,對於乙個單位元組的資料,儲存方式都是一樣的。比如uint8 t類,char類在大端和小端都可以不經過轉換直接讀取。而對於兩位元組及以上位元組大小的資料,大小端的儲存方式就有區別了。大端 網路序 的儲存方式與我們的閱讀邏輯是相同的。大端的儲存方式是高位儲存在低位址中,小...

大小端的問題 什麼是大小端和如何實現大小端)

1.什麼是大小端?1 大端 big endian 資料的高位元組存放在記憶體的低位址中,而資料的低位元組存放在記憶體的高位元組中。高低大 2 小端 little endian 資料的高位元組存放在記憶體的高位址中,而資料的低位元組存放在記憶體的低位元組中。高高小 下面以unsigned int va...