定址和位元組順序 所謂的大小端

2021-08-31 21:34:36 字數 1427 閱讀 8618

某些機器在儲存器中按照從最低有效位元組到最高有效位元組的順序儲存物件,這種方式稱之為小端法;而有些機器按照從最高有效位元組到最低有效位元組進行儲存,這種方式稱之為大端法

例項,乙個int型的資料0x12345678,佔四個位元組,假設位址為0x2000 ~ 0x2003。

位址0x2000

0x2001

0x2002

0x2003

小端法0x78

0x56

0x34

0x12

大端法0x12

0x34

0x56

0x78

大小端的判斷方法很多,不過我覺得聯合體union可以簡單明瞭的解釋這個問題,定義的union多個成員共用一塊記憶體,每乙個成員在任一時刻有且只有乙個成員使用此塊記憶體。下例中的word和byte就占用同一記憶體,因此對成員word賦值,成員byte裡面就存放了相應的值。

對word賦值0x12345678,假設位址為0x2000 ~ 0x2003;大小端存放方式見下表。

成員的位址

0x2000

0x2001

0x2002

0x2003

小端法/byte[0~3]

0x78

0x56

0x34

0x12

大端法/byte[0~3]

0x12

0x34

0x56

0x78

#include "stdio.h"

#define uint8 unsigned char

#define uint16 unsigned short

#define uint32 unsigned int

typedef union

data;

int main(void)

if(num.byte[0] == 0x12)

printf("\n大端法:");

if(num.byte[0] == 0x78)

printf("\n小端法:");

for(i = 0; i < sizeof(data); i++)

printf("\n");

return 0;

}

得出此機器是以小端模式存放資料的

lirong@pc-lr:~/code/test$ ./main

0x12345678的存放方式:

addr:0x7fff4f8292c0 0x7fff4f8292c1 0x7fff4f8292c2 0x7fff4f8292c3

小端法:0x78 0x56 0x34 0x12

2018-11-14-lr

定址和位元組順序

當我們遇到跨多位元組的程式物件時,這時候就需要判定清楚兩個問題,乙個是物件的位址,另外乙個是儲存器的位元組排列情況。位元組的排列不同的機器有著大端和小端之分,在不同型別的機器之間通過網路傳送二進位制資料時,接收程式字裡的位元組可能會出現反序排列,這時,網路應用程式的 必須得遵守一定的位元組順序規則。...

定址和位元組順序

以前學習微機原理的時候,對大端小端的理解感覺很模糊,反正也不怎麼使用到。現在在看另外一本講計算機作業系統的書的時候,發現要在儲存器中表示乙個多位元組的物件的時候,很自然就會考慮到多個位元組的排列順序問題。比如乙個int型別的變數,它占有4個位元組大小,假如說它的起始位址是0x100,那麼它就會只能用...

位元組序和大小端

大多數處理器中記憶體是可以以位元組為單位進行定址的,當資料型別 int,long 大於1個位元組時,其所占用就的位元組在記憶體中的順序存在兩種模式,分別是小端模式 little endian 和大端模式 big endian 小端模式低位位元組存放在低位址,大端模式高位位元組存放在低位址。大端模式的...