什麼是大端序和小端序,為什麼要有位元組序

2021-10-19 21:21:14 字數 2321 閱讀 2117

位元組序,又稱端序尾序(英語中用單詞:endianness表示),在計算機領域中,指電腦記憶體中或在數字通訊鏈路中,占用多個位元組的資料的位元組排列順序。

在幾乎所有的平台上,多位元組物件都被儲存為連續的位元組序列。例如在 go 語言中,乙個型別為int的變數x位址為0x100,那麼其指標&x的值為0x100。且x的四個位元組將被儲存在記憶體的0x100, 0x101, 0x102, 0x103位置。

位元組的排列方式有兩個通用規則:

小端序(little-endian),將乙個多位數的低位放在較小的位址處,高位放在較大的位址處,則稱小端序。小端序與人類的閱讀習慣相反,但更符合計算機讀取記憶體的方式,因為cpu讀取記憶體中的資料時,是從低位址向高位址方向進行讀取的。

上面的文字描述有點抽象,我們拿乙個例子來解釋一下位元組排列時的大端序和小端序。

在記憶體中存放整型數值168496141需要4個位元組,這個數值的對應的16進製表示是0x0a0b0c0d,這個數值在用大端序和小端序排列時的在記憶體中的示意圖如下:

很多人會問,為什麼會有位元組序,統一用大端序不行嗎?答案是,計算機電路先處理低位位元組,效率比較高,因為計算都是從低位開始的。所以,計算機的內部處理都是小端位元組序。在計算機內部,小端序被廣泛應用於現代 cpu 內部儲存資料;而在其他場景,比如網路傳輸和檔案儲存則使用大端序

go 語言儲存資料時的位元組序依賴所在平台的 cpu,處理大小端序的**位於encoding/binary,包中的全域性變數bigendian用於操作大端序資料,littleendian用於操作小端序資料,這兩個變數所對應的資料型別都實現了byteorder介面。

package main

import (

"encoding/binary"

"fmt"

"unsafe"

)const int_size = int(unsafe.sizeof(0)) //64位作業系統,8 bytes

//判斷我們系統中的位元組序型別

func systemedian()  else 

fmt.printf("temp: 0x%x,%v\n",bs[0],&bs[0])

fmt.printf("temp: 0x%x,%v\n",bs[1],&bs[1])

fmt.printf("temp: 0x%x,%v\n",bs[2],&bs[2])

fmt.printf("temp: 0x%x,%v\n",bs[3],&bs[3])

}func testbigendian() 

func testlittleendian() 

func main() 

執行上面的程式會在終端裡輸出

&i: 0xc000084000

system edian is little endian

temp: 0x4,0xc000084000

temp: 0x3,0xc000084001

temp: 0x2,0xc000084002

temp: 0x1,0xc000084003

16909060 use big endian: 

int32 to bytes: [1 2 3 4]

int32 to bytes: 01020304 

bytes to int32: 16909060

1020304 use little endian: 

int32 to bytes: 04030201 

bytes to int32: 16909060

計算機電路先處理低位位元組,效率比較高,因為計算都是從低位開始的。所以,計算機的內部處理都是小端位元組序。但是,人類還是習慣讀寫大端位元組序。所以,除了計算機的內部處理,其他的場合比如網路傳輸和檔案儲存,幾乎都是用的大端位元組序。正是因為這些原因才有了位元組序。

計算機處理位元組序的時候,如果是大端位元組序,先讀到的就是高位位元組,後讀到的就是低位位元組。小端位元組序則正好相反。

go指標的使用限制和unsafe.pointer的突破之路

大端序和小端序

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

大端序和小端序

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

大端序和小端序

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