什么是golang与PHP的unpack(“ f”,$ str)等效?

时间:2019-12-04 04:19:35

标签: php go

我想使用golang将十六进制转换为float,但是我没有得到正确的结果。

PHP具有解压缩功能,可以获得正确的结果。

Golang代码

i := "CDC1933E"
b, _ := hex.DecodeString(i)
buf := bytes.NewReader(b)
var f float32
err := binary.Read(buf, binary.BigEndian, &f)
fmt.Println(f)

PHP代码

var_dump(unpack("f",hex2bin("CDC1933E")));

正确的结果应该是0.28858796。

1 个答案:

答案 0 :(得分:0)

以下内容将为您提供预期的结果(playground):

i := "CDC1933E"
b, _ := hex.DecodeString(i)
buf := bytes.NewReader(b)
var ui uint32
err := binary.Read(buf, binary.LittleEndian, &ui)
if err != nil {
    panic(err)
}
f := math.Float32frombits(ui)
fmt.Println(f)

您会注意到数据是采用低端字节序编码的(Python默认为主机系统的字节顺序;假设您正在运行的是低端字节序的Intel x86 / AMD64)。

相关问题