【发布时间】:2021-01-19 22:25:03
【问题描述】:
我对标准库中的 Go 二进制包如何使用 BigEndian 排序将整数表示为 []byte 有点困惑。
作为参考,下面是我混淆的标准库中的方法:
func (bigEndian) PutUint32(b []byte, v uint32) {
_ = b[3] // early bounds check to guarantee safety of writes below
b[0] = byte(v >> 24)
b[1] = byte(v >> 16)
b[2] = byte(v >> 8)
b[3] = byte(v)
}
假设我有一个 IPv4 寻址,表示为无符号 32 位整数,例如 236194314
对于 BigEndian 排序,这应该表示为 4 字节切片:[10 10 20 14]
但是,PutUint32 将数组中的最高有效字节存储在最后一个索引b[3] = byte(v) 中,结果为[14 20 10 10]。
对此有什么具体的解释吗?
【问题讨论】:
-
b[3]=byte(v)(10) 是最低有效字节。
标签: go