美文网首页
弄清字节序

弄清字节序

作者: UULU | 来源:发表于2021-01-15 20:50 被阅读0次

    BigEndian、LittleEndian 字节在内存地址中的存放顺序,简称字节序。

    弄清概念

    网络上常把把 Endian 译成端,简称大端、小端,很容易产生歧义,端指的是开头还是结尾。

    endian - 组成 end-ianend 结束的意思,-ian表示"……地方人,信仰…….教的人,从事……职业的人",所以就是结束的地方,及末端、结尾处。

    如uint32值1,存储在内存中
    
    大端字节序:00 00 00 01 (视觉上结尾大)
    小端字节序:01 00 00 00 (视觉上结尾小)
    
    内存地址:低地址(开头) -> 高地址(结尾)
    
    • BigEndian:大(尾)端 - 值从结尾处放,结尾先有值,开头为 0,所以叫大尾端
    • LittleEndian:小(尾)端 - 值从开头处先放,开头先有值,结尾为 0,所以叫小尾端
    Capture.PNG

    应用场合

    一般来说,x86 系列 CPU 都是 little-endian 的字节序,PowerPC 通常是 big-endian,网络字节顺序也是 big-endian 还有的 CPU 能通过跳线来设置 CPU 工作于 Little endian 还是 Big endian 模式。

    代码实例

    package main
    
    import (
        "encoding/binary"
        "fmt"
    )
    
    func main() {
        var a uint32 = 257
    
        b := make([]byte, 4)
        binary.BigEndian.PutUint32(b, a)
        fmt.Println(b)
        for i := range b {
            fmt.Printf("%p\n", &b[i])
        }
        fmt.Println("")
    
        c := make([]byte, 4)
        binary.LittleEndian.PutUint32(c, a)
        fmt.Println(c)
    
        for i := range c {
            fmt.Printf("%p\n", &c[i])
        }
    }
    
    
    BigEndian: [0 0 1 1]
    0xc0000b8010
    0xc0000b8011
    0xc0000b8012
    0xc0000b8013
    
    LittleEndian: [1 1 0 0]
    0xc0000b8014
    0xc0000b8015
    0xc0000b8016
    0xc0000b8017
    

    相关文章

      网友评论

          本文标题:弄清字节序

          本文链接:https://www.haomeiwen.com/subject/ujzwaktx.html