大端模式與小端模式

2022-07-05 02:39:09 字數 1066 閱讀 4109

對於跨越多位元組的程式物件,我們必須建立兩個規則:這個物件的位址是什麼,以及在儲存器中如何安排這些位元組。在幾乎所有的機器上,多位元組物件都被儲存為連續的位元組序列,物件的位址為所使用位元組的最小位址。例如,假設乙個型為int變數x的位址為0x100,也就是說,位址表示式&x的值為0x100。那麼,x的4個位元組被儲存在儲存器的0x100,0x101,0x102和0x103位置。

排列表示乙個物件的位元組有兩個通用的規則。考慮乙個w位的整數,位表示為[xw-1,xw-2,...,x1,x0],其中xw-1是最高有效位i,而x0是最低有效位,假設w是8的倍數,這些位就能被分組成位元組,其中最高有效位元組包含位[xw-1,xw-2,...,xw-8],最低有效位元組包含位[x7,x6,...,x0],其他位元組包含中間的位。某些機器選擇在儲存器中按照從最低有效位元組到最高有效位元組的順序儲存物件,而另一些機器則按照從最高有效位元組到最低有效位元組的順序儲存。前一種規則——最低有效位元組在最前面的方式,稱為小端法(little endian)。大多數intel相容機都採用這種規則。後一種規則——最高有效位元組在最前面的方式,稱為大端法(big endian)。大多數ibm和sun microsystems的機器都採用這種規則。

繼續我們前面的示例,假設變數x型別為int,位於位址0x100處,它的十六進製制值為0x1234567.位址範圍為0x100~0x103的位元組,其排列順序依賴於機器的型別。

注意,在字0x01234567中,高位位元組的十六進製制值為0x01,而低位位元組值為0x67。

如何判斷大端模式和小端模式

方法一

void

checkendian()

else

if ((*p) == 0x34

) }

方法二:

void

checkendian() num;

num.a = 0x1234

;

if (num.b == 0x12

) else

if (num.b == 0x34

) }

大端模式與小端模式

記憶體 位址 0x3000 0x3001 0x3002 0x3003 0x3004 0x3005 十六進製制數 1234 5678 x 大端模式 資料中的高位位元組資料存放在位址中的低位位置,資料中的低位位元組資料則存放在位址中的高位位置,是正常邏輯順序,方便人的理解。要注意的是 不管是大端模式還是...

大端模式與小端模式

小端機 little endian 大端機 big endian 舉乙個例子,比如數字0x12 34 56 78在記憶體中的表示形式為 使用 union bool islittleendian foo foo.a 1 00 00 00 01 return foo.b 1 保留最前的 00,也即高位位...

大端模式與小端模式

之前一直不在意大端模式與小端模式,隨著學習的過程,這裡總結一下 小端模式 little endian 低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的低位址端 大端模式 big endian 高位位元組排放在記憶體的低位址端,低位位元組排放在記憶體的高位址端 網路位元組序 tcp ip各層...