美文网首页
Go语言中的字节序

Go语言中的字节序

作者: oowl | 来源:发表于2017-04-11 16:27 被阅读0次
    维基百科

    字节序:字节顺序,又称端序尾序(英语:Endianness)。在计算机科学领域中,是跨越多字节的程序对象的存储规则例如假设上述变量x类型为int,位于地址0x100处,它的十六进制为0x01234567,地址范围为0x100~0x103字节,其内部排列顺序依赖于机器的类型。大端法从首位开始将是:0x100: 01, 0x101: 23,..。而小端法将是:0x100: 67, 0x101: 45,..

    Go中的binary包实现了简单的数字与字节序列的转换以及变长值的编解码

    GO程序

    package main

    import ( "fmt" "bytes" "encoding/binary" ) func main(){ n := 0x12345678 bytesBuffer := bytes.NewBuffer([]byte{}) //BigEndian 大端顺序存储 LittleEndian小端顺序存储 binary.Write(bytesBuffer, binary.BigEndian, int32(n)) data:=bytesBuffer.Bytes() fmt.Printf("[0]: %#x addr:%#x\n",data[0],&data[0]) fmt.Printf("[0]: %#x addr:%#x\n",data[1],&data[1]) fmt.Printf("[0]: %#x addr:%#x\n",data[2],&data[2]) fmt.Printf("[0]: %#x addr:%#x\n",data[3],&data[3]) }

    输出
    [0]: 0x12 addr:0xc042010248 [1]: 0x34 addr:0xc042010249 [2]: 0x56 addr:0xc04201024a [3]: 0x78 addr:0xc04201024b

    也可以使用下面的方式
    n := 0x12345678 var data []byte = make([]byte,4) //操作的都是无符号整型 binary.BigEndian.PutUint32(data,uint32(n))

    可以使用下面的方式判断当前系统的字节序类型
    const INT_SIZE int = int(unsafe.Sizeof(0))

    //判断我们系统中的字节序类型 func systemEdian() { var i int = 0x1 bs := (*[INT_SIZE]byte)(unsafe.Pointer(&i)) if bs[0] == 0 { fmt.Println("system edian is little endian") } else { fmt.Println("system edian is big endian") } }

    相关文章

      网友评论

          本文标题:Go语言中的字节序

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