我正在尝试学习Golang,并且有Python的背景。我目前正在努力理解如何将变量打包成二进制格式(带有校验和)。在Python中,我会使用类似以下代码:
import struct
import hashlib
a = 100
b = "foo\x00\x00" # Padded to fixed length
packet = struct.pack('<B5s', a, b)
digest = hashlib.sha256(packet).digest()
packet += digest
为了在Go中做同样的事情,我正在尝试编写以下代码:
package main
import (
"crypto/sha256"
"fmt"
"encoding/binary"
"bytes"
)
type packet struct {
a uint8
b string
}
func main() {
var p = packet{}
p.a = 1
p.b = "foo\x00\x00"
buf := new(bytes.Buffer)
binary.Write(buf, binary.LittleEndian, &p)
h := sha256.New()
h.Write(buf.String())
fmt.Printf("% x\n", p)
}
不幸的是,无论我如何尝试攻击它,我似乎都陷入了变量类型冲突的噩梦中(缓冲区、字节数组和字符串)。 我希望得到一些指导,以确定我是否采取了正确的方法。