位元組序,又稱端序或尾序(英語中用單詞: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機都...