【发布时间】:2019-03-24 23:06:01
【问题描述】:
我刚刚学习了 Python (3.x),我被 HEX 字符串转换为浮点数所困。我有这个 HEX 字符串值:
'0x22354942F31AFA42CE6A494311518A43082CAF437C6BD4C35F78FA433BF10F442A5222448D3D3544200749C438295C4468AF6E4406B4804450518A4423B0934450E99CC4'
我想把它变成浮动。
我已尝试使用此代码:
bs=bytes.fromhex(row[2:])
fmt = '<' + ('H' * (len(bs) // 2))
res=struct.unpack(fmt, bs)
它给了我13602.0,16969.0,6899.0,17146.0,27342.0,17225.0,20753.0,17290.0,11272.0,17327.0,27516.0,50132.0,30815.0,17402.0,61755.0,17423.0,21034.0,17442.0,15757.0,17461.0,1824.0,50249.0,10552.0,17500.0,44904.0,17518.0,46086.0,17536.0,20816.0,17546.0,45091.0,17555.0,59728.0,50332.0的结果
检查后,我发现我目前拥有的代码是以 16 为基数的浮点数,而我需要以 32 为基数的代码(或者可能不是因为我不确定什么基数/格式),具有预期的浮点数结果作为50.3018875, 125.052635,201.4172,276.633331,350.344,424.839722,500.9404,575.7692,649.2838,724.961731,804.1113,880.644043,954.7407,1029.62573,106.541,1181.50427,1255.291 我从这个Calculator Converter 得到的值。
我应该在编码中进行哪些更改以获得预期的结果?
谢谢。
【问题讨论】:
-
bs:不是有效的 python(第一行)。你的意思是bs =?另外,您能否给出一个完整的输入和输出示例(没有...)。目前还不清楚事物是如何编码的。您拥有的十六进制是 136 字节。这可能是 17 个 IEEE 双精度数(64 位浮点数)或 34 个 IEEE 浮点数(32 位浮点数)。 -
在 base 16/base 32 中浮动是什么意思?您的十六进制值是 ieee 浮点数的表示还是它们是浮点数中的数字?如果是后者,小数分隔符在哪里? (点?)
-
我在问题上写错字了,我只是在问题上编辑了它,是的,我的意思是 bs=。我得到的当前输出是
13602.0,16969.0,6899.0,17146.0,27342.0,17225.0,20753.0,17290.0,11272.0,17327.0,27516.0,50132.0,30815.0,17402.0,61755.0,17423.0,21034.0,17442.0,15757.0,17461.0,1824.0,50249.0,10552.0,17500.0,44904.0,17518.0,46086.0,17536.0,20816.0,17546.0,45091.0,17555.0,59728.0,50332.0 -
预期结果:
50.3018875, 125.052635,201.4172,276.633331,350.344,424.839722,500.9404,575.7692,649.2838,724.961731,804.1113,880.644043,954.7407,1029.62573,106.541,1181.50427,1255.291@BaileyParker 谢谢。
标签: python python-3.x floating-point type-conversion