2024-06-17 12:09:24 发布
网友
在python中,如何将浮点数转换为16进制数,每32位FLP数8位十六进制数?
例如:input = 1.2717441261e+20 output wanted : 3403244E
input = 1.2717441261e+20 output wanted : 3403244E
您的预期输出有问题:
import struct input = 1.2717441261e+20 buf = struct.pack(">f", input) print ''.join("%x" % ord(c) for c in struct.unpack(">4c", buf) )
输出:
60dc9cc9
如果您想要IEEE-754表示的字节值,struct模块可以这样做:
>>> import struct >>> f = 1.2717441261e+20 >>> struct.pack('f', f) '\xc9\x9c\xdc`'
这是字节的字符串版本,然后可以将其转换为十六进制值的字符串表示形式:
>>> struct.pack('f', f).encode('hex') 'c99cdc60'
并且,如果您希望它是十六进制整数,请按如下方式进行分析:
>>> s = struct.pack('f', f).encode('hex') >>> int(s, 16) 3382500448
要将整数显示为十六进制:
>>> hex(int(s, 16)) '0xc99cdc60'
注意,这与问题中的十六进制值不匹配——如果您的值是所需的正确值,请更新问题以说明它是如何派生的。
有几种可能的方法可以做到这一点,但是没有一种方法能达到你想要的结果。
可以将此浮点值编码为其IEEE二进制表示形式。这确实会导致一个32位的数字(如果你用单精度的话)。但不管是哪一种情况,结果都不一样:
import struct struct.pack("<f", 1.2717441261e+20).encode("hex") # -> 'c99cdc60' struct.pack(">f", 1.2717441261e+20).encode("hex") # -> '60dc9cc9' struct.unpack("<f", "3403244E".decode("hex")) # -> (687918336.0,) struct.unpack(">f", "3403244E".decode("hex")) # -> (1.2213533295835077e-07,)
由于另一个答案与结果不符,我将采用其他答案并将其包括在这里:
float.hex(1.2717441261e+20) # -> '0x1.b939919e12808p+66'
也与3403244E无关,所以也许你想澄清你的确切意思。
3403244E
当然还有其他的方法可以进行这种对话,但是除非你明确说明你想要哪种方法,否则没人可能会帮助你。
您的预期输出有问题:
输出:
如果您想要IEEE-754表示的字节值,struct模块可以这样做:
这是字节的字符串版本,然后可以将其转换为十六进制值的字符串表示形式:
并且,如果您希望它是十六进制整数,请按如下方式进行分析:
要将整数显示为十六进制:
注意,这与问题中的十六进制值不匹配——如果您的值是所需的正确值,请更新问题以说明它是如何派生的。
有几种可能的方法可以做到这一点,但是没有一种方法能达到你想要的结果。
可以将此浮点值编码为其IEEE二进制表示形式。这确实会导致一个32位的数字(如果你用单精度的话)。但不管是哪一种情况,结果都不一样:
由于另一个答案与结果不符,我将采用其他答案并将其包括在这里:
也与
3403244E
无关,所以也许你想澄清你的确切意思。当然还有其他的方法可以进行这种对话,但是除非你明确说明你想要哪种方法,否则没人可能会帮助你。
相关问题 更多 >
编程相关推荐