在PHP中,要对二进制数据进行编码,例如整数,浮点数等,我会执行以下操作:
<?php
$uint32 = pack("V", 92301);
$uint16 = pack("v", 65535);
$float = pack("f", 0.0012);
echo "uint32: " . bin2hex($uint32) . "\n"; // 8d680100
echo "uint16: " . bin2hex($uint16) . "\n"; // ffff
echo "float: " . bin2hex($float) . "\n"; // 52499d3a
如何将此代码带入Go?
答案 0 :(得分:3)
为什么需要在pack()
中的类型已经是语言本身的本地类型的语言中使用pack()
等函数?
要对二进制数据进行编码,请使用包encoding/binary
。复制代码:
package main
import (
"bytes"
"encoding/binary"
"fmt"
)
func main() {
buf := new(bytes.Buffer)
byteOrder := binary.LittleEndian
binary.Write(buf, byteOrder, uint32(92301))
fmt.Printf("uint32: %x\n", buf.Bytes())
buf.Reset()
binary.Write(buf, byteOrder, uint16(65535))
fmt.Printf("uint16: %x\n", buf.Bytes())
buf.Reset()
binary.Write(buf, byteOrder, float32(0.0012))
fmt.Printf("float: %x\n", buf.Bytes())
}
有了这个,它可以很容易地编码其他数据结构。您真的只需要将binary.Write
的第三个参数更改为您希望的数据类型,该函数将执行all the magic!
答案 1 :(得分:0)
这不是一个完整的答案,但是由于我一直在寻找以下对象,因此我认为它也可以帮助其他人。
要直接等效于php的bin2hex(),可以执行以下操作:
func bin2hex(str string) string {
return hex.EncodeToString([]byte(str))
}