**:
一、概述
位元組序,又稱端序,尾序,英文: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 記憶體高位元位
三、判定方法
typedef
struct
tagregion region;
union
cc;
int
main(
int
argc,
char
* argv)
static
unsigned
char
isbigendian()
;
使用以下方式更簡潔一些:
1 #include2using
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體系結構是用小端序。程式設計檢視自己電腦是大端還是小...