【问题标题】:IPv4 Address BigEndian ByteOrderIPv4 地址 BigEndian 字节顺序
【发布时间】: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


【解决方案1】:

数字 236194314 是十六进制的 0E 14 0A 0A。所以最高有效字节确实是 14d。表示为无符号 32 位整数的 IPv4 寻址已经字节反转。

问题发生在转换为字节切片之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-28
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2016-10-17
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多