Golang相当于Python的struct.pack / struct.unpack

时间:2016-10-21 17:23:14

标签: go

在Python中,使用struct模块,我可以做类似这样的事情来获取值的压缩表示形式:

import struct
print struct.pack('L', 64)
"@\x00\x00\x00\x00\x00\x00\x00"
struct.unpack('L', '@\x00\x00\x00\x00\x00\x00\x00')
(64,)

我想在Go中做类似的事情,除了我有点不清楚如何这样做。我知道我可以这样做:

import (
    "encoding/binary"
    "fmt"
)

bs := make([]byte, 8)
binary.PutUvarint(bs, uint64(64))
fmt.Printf("%s", bs)
"@"

但那非常不同,可能不是我想要的。

2 个答案:

答案 0 :(得分:6)

是的,“编码/二进制”是你想要的,你只是不想要变长格式。

https://play.golang.org/p/e81LuPO_JR

bs := make([]byte, 8)
binary.LittleEndian.PutUint64(bs, uint64(64))
fmt.Printf("%#v\n", bs)

i := binary.LittleEndian.Uint64(bs)
fmt.Println(i)

答案 1 :(得分:1)

有几个有趣的解决方案。

第一点是要点非常简单,其局限性很明显:

https://gist.github.com/cloveryume/9a59e8d77f5836f11720#file-golang_struct_packed-go

第二个是试图打包工作的包:

https://github.com/lunixbochs/struc