Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将十六进制字符串转换为浮点(小端)_Python_Python 3.x_Floating Point_Type Conversion - Fatal编程技术网

Python 如何将十六进制字符串转换为浮点(小端)

Python 如何将十六进制字符串转换为浮点(小端),python,python-3.x,floating-point,type-conversion,Python,Python 3.x,Floating Point,Type Conversion,我刚刚学习了Python(3.x),我一直在进行从十六进制字符串到浮点的转换。我有以下十六进制字符串值: “0x22354942F31AFA42CE6A494311518A43082CAF437C6BD4C35F78FA433BF10F442A52224448D3D3544200749C438295C4468AF6E4406B480445018A4423B0934450E99CC4” 我想把它变成浮子 我已尝试使用此代码: bs=bytes.fromhex(row[2:]) fmt = '<

我刚刚学习了Python(3.x),我一直在进行从十六进制字符串到浮点的转换。我有以下十六进制字符串值:
“0x22354942F31AFA42CE6A494311518A43082CAF437C6BD4C35F78FA433BF10F442A52224448D3D3544200749C438295C4468AF6E4406B480445018A4423B0934450E99CC4”
我想把它变成浮子

我已尝试使用此代码:

bs=bytes.fromhex(row[2:])
fmt = '<' + ('H' * (len(bs) // 2))
res=struct.unpack(fmt, bs)
bs=bytes.fromhex(第[2:]行)

fmt='让我们在这里进行分解,因为您似乎对表示的所有杂耍都有点困惑。您有一些二进制数据的十六进制字符串(即16进制编码)。这是您的
0x22354942F31AFA42CE6A494311…
。您正确地识别出可以将其从编码形式转换为python
字节,并使用
字节。fromhex

hex_encoded = '0x22354942F31AFA42CE6A494311518A43082CAF437C6BD4C35F78FA433BF10F442A5222448D3D3544200749C438295C4468AF6E4406B4804450518A4423B0934450E99CC4'
binary_data = bytes.fromhex(hex_encoded[2:])  # we do 2: to remove the leading '0x'
在这一点上,除非我们知道二进制数据是如何构造的,否则我们什么都做不了。但我们可以猜测一下。您知道前几个数字是浮点数:
50.3018875125.052635201.4172,
。通常,浮点数使用。这提供了浮点数的3种不同编码:二进制16(16位)、浮点32位和双精度64位。您可以在中看到这些代码,它们分别是格式代码
'e'
'f'
,和
'd'
。我们可以尝试每种方法来查看您的二进制数据编码为哪个(如果有的话)。通过反复试验,我们发现您的数据编码为32位浮点,因此您可以使用以下方法对其进行解码:

FLOAT = 'f'
fmt = '<' + FLOAT * (len(binary_data) // struct.calcsize(FLOAT))
numbers = struct.unpack(fmt, binary_data)
print(numbers)
FLOAT='f'

fmt='
bs:
不是有效的python(第一行)。你是说
bs=
?另外,您能否给出输入和输出的完整示例(无
)。目前还不清楚事物是如何编码的。十六进制是136字节。这可能是17个IEEE双精度(64位浮点数)或34个IEEE浮点数(32位浮点数)。基数16/32中的浮点数是什么意思?十六进制值是ieee浮点数的表示还是浮点数中的数字?如果是后者,分离机在哪里?(点?)我在写问题的时候打错了,我只是在问题上编辑了一下,是的,我的意思是bs=。我得到的电流输出是
13602.016969.06899.017146.027342.017225.020753.017290.011272.017327.027516.0501132.030815.017402.061755.017423.021034.017442.015757.017461.01824.050249.010552.017500.044904.017518.046086.017536.020816.017546.045091.017555.059728.05032.0
预期结果:
50.3018875125.052635201.4172276.633331350.344424.839722500.9404575.7692649.2838724.961731804.1113880.644043954.74071029.62573106.5411181.504271255.291
@baileparker谢谢。是的,我对这些陈述感到很困惑。非常感谢你!最后,它成功了!!我只是想知道,结果的一些值是负数,有没有办法格式化它,使其成为绝对值?谢谢!如果一些数字是从
struct.unpack
中以负数出现的,那么这意味着它们就是这样编码的。但是您可以
映射(abs,numbers)
以获得所有数字的绝对值。