大端序和小端序

2021-06-21 21:48:46 字數 1971 閱讀 2562

**:

一、概述

位元組序,又稱端序,尾序,英文:endianness。

在電腦科學領域中,位元組序是指存放多位元組資料的位元組(byte)的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序(bit)。

大小端序跟硬體的體系結構有關,所有x86系列的pc機都是小端序,跟作業系統無關。在x86系列的pc上的solaris系統是小端序,sun sparc平台的solaris是大端序。

大端位元組序,高位元組存於記憶體低位址,低位元組存於記憶體高位址;小端位元組序反之。

如乙個long型資料0x12345678

大端位元組序:

記憶體低位址--> 0x12

0x34

0x56

記憶體高位址--> 0x78

小端位元組序:

記憶體低位址--> 0x78      

0x56

0x34

記憶體高位址--> 0x12

二、大端序和小端序

大端序(英:big-endian)或稱大尾序。

資料以8bit為單位:

位址增長方向  →

...

0x0a

0x0b

0x0c

0x0d

...

示例中,最高有效位(msb, most significant byte)是0x0a 儲存在最低的記憶體位址處。下乙個位元組0x0b存在後面的位址處。正類似於十六進製制位元組從左到右的閱讀順序。

資料以16bit為單位:

位址增長方向  →

...0x0a0b

0x0c0d

...最高的16bit單元0x0a0b儲存在低位。

小端序(英:little-endian)或稱小尾序。

資料以8bit為單位:

位址增長方向  →

...

0x0d

0x0c

0x0b

0x0a

...

最低有效位(lsb,least significant byte)是0x0d 儲存在最低的記憶體位址處。後面位元組依次存在後面的位址處。

資料以16bit為單位:

位址增長方向  →

...

0x0c0d

0x0a0b

...最低的16bit單元0x0c0d儲存在低位。

採用大端序的cpu和採用小端序的cpu不僅在位元組上是相反的,在位元位上也是相反的。

比如0x01在記憶體中的儲存

大端序:記憶體低位元位 00000001 記憶體高位元位

小端序:記憶體低位元位 10000000 記憶體高位元位

比如0x00000001

大端序:記憶體低位元位 00000000 00000000 00000000 00000001 記憶體高位元位

小端序:記憶體低位元位 10000000 00000000 00000000 00000000 記憶體高位元位

三、判定方法

typedefstructtagregion region;

unioncc;

intmain(intargc,char* argv)

staticunsignedcharisbigendian()

;

使用以下方式更簡潔一些:

1 #include 

2using

namespace std;34

int main(int argc, char **argv)

5

大端序和小端序

在socket程式設計的時候會遇到端序的問題。位元組序和程式語言無關,和硬體的儲存方式有關。intel的cpu使用小端序,而網路上傳輸資料使用大端序。在我的理解中,大端序和小端序並沒有哪種更好,只是儲存的方式不同而已。記憶體中我們只關心1byte,位址的基本單位也是byte。位元組序不關心1個byt...

大端序和小端序

一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...

大端序小端序

摘自 linux核心程式設計 比如看這個 十六進製制數0x12345678的表示 32位大端序表示 1234 56780 8 1624 32位小端表示 7856 341208 1624 備註 0x12345678中 12 是高位,78是低位。x86體系結構是用小端序。程式設計檢視自己電腦是大端還是小...