Python轻巧的解决方案用于打字浮点(64)为字节



我想在显示浮点值(或在内存中更连续的)显示原始字节时具有非常简单的解决方案。在我的理解中,这被命名为键入(读取字节中的内存值)不要被误解为铸造(阅读值和解释字节)。

最简单的测试似乎是:

import numpy
a=3.14159265
print(a.hex())
# Returns 0x1.921fb53c8d4f1p+1
b=numpy.array(a)
print(b.tobytes())
# returns b'xf1xd4xc8Sxfb!t@'
# expected is something like 'F1' 'D4' 'C8' '53' 'FB' '21' '09' '40'

,但是方法hex()返回了对十六进制中IEEE浮点代表的解释。第二种方法显示了四个十六进制字节标记x,但我想知道float64应该读取8个字节。此外,我想知道其他角色。
我很好的旧简单c我只需在float的存储器地址上使用一个未签名的int指针,并从该无符号int" array"(pointer。)
上打印8个值来实现。我知道,我可以在Python中使用C-但是还有其他简单的解决方案吗?
也许很感兴趣:我需要该功能来将许多大型浮动向量保存到数据库中。

我认为,可以在正确解释六角字节的正确解释中找到类似的问题,将其转换为浮动读数(如果可能的话)(可显示字符),它们不会在 x -form中打印。我该如何更改?

您可以使用内置模块struct为此。如果您的python 3.5或更高版本:

import struct
struct.pack('d', a).hex()

它给出:

'f1d4c853fb210940'

如果您的Python大于3.5:

import binascii
binascii.hexlify(struct.pack('d', a))

或:

hex(struct.unpack('>Q', struct.pack('d', a))[0])

如果您有一系列浮子,并且想使用numpy:

import numpy as np
np.set_printoptions(formatter={'int':hex})
np.array([a]).view('u8')

相关内容

最新更新