如何使用Raku将十六进制字符串转换为IEEE754浮点数?

9
在Python中,unpack函数可以将十六进制字符串转换为IEEE754浮点数。
import struct

print(struct.unpack('<f', bytes.fromhex("00000042"))[0]) # 32.0

<代表小端字节顺序,f代表浮点数格式。

如何使用Raku将十六进制字符串转换为IEEE754浮点数?


1
我不太确定转换应该做什么,字符串"00000042"代表什么?是一个十六进制数作为字符串吗?还是一个字节列表00 00 00 42?那个数字32.0是什么意思?如果你在上面的Python代码中输入"00000052",你得到的结果是137438953472.0,这是有意的吗? - Marijn
1
无论如何,在Raku中,你可能想要类似这样的东西:say "00000042".encode>>.base(16)[*-1].Rat.raku - Marijn
1
无论如何,在Raku中,你可能会想要类似这样的东西:say "00000042".encode>>.base(16)[*-1].Rat.raku - Marijn
1
@Marijn 00000042 是一个字节列表:00 00 00 42 - ohmycloudy
1
@Marijn 00000042 是一个字节列表:00 00 00 42 - ohmycloudy
显示剩余2条评论
1个回答

8
一个可能的方法是:
  1. 将其解析为整数
  2. 将整数写入Buf
  3. Buf中读取浮点数
例如:
say do given Buf.new {
    .write-int32(0, :16("00000042"), BigEndian);
    .read-num32(0)
}

这段代码的输出结果与Python示例相同(32)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接