弄清字节序

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容