字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。
字节序分为:大端字节序
和小端字节序
。
小端字节序
,指一个单元在计算机中存放时按照低位在低地址,高位在高地址的模式存放;
大端字节序
,指一个单元在计算机中存放时按照低位在高地址,高位在低地址的模式存放。
Go 语言里字节序的转换主要是通过: encoding/binary
;
var i int32 = 0x01020304 // 十六进制表示
buffer := new(bytes.Buffer)
binary.Write(buffer, binary.BigEndian, i) // 大端字节序
fmt.Printf("BigEndian: %x \n", buffer.Bytes()) // 01020304
buffer = new(bytes.Buffer)
binary.Write(buffer, binary.LittleEndian, i) // 小端字节序
fmt.Printf("BigEndian: %x \n", buffer.Bytes()) // 04030201
同时,也支持批量对结构体
和字节序
的相互转换:
type User struct {
Name [30]byte
Age uint32
}
user := User{}
copy(user.Name[:], "John Wilson")
user.Age = 30
buffer := new(bytes.Buffer)
binary.Write(buffer, binary.BigEndian, &user) // 批量转为大端字节序
var user1 User
binary.Read(buffer, binary.BigEndian, &user1) // 批量转回结构体