python轻量级解决方案,用于将浮点(64)类型转换为字节

python轻量级解决方案,用于将浮点(64)类型转换为字节,python,python-3.x,typecasting-operator,typecast-operator,Python,Python 3.x,Typecasting Operator,Typecast Operator,我希望有一个非常简单的解决方案来显示浮点值(或内存中的多个连续字节)的原始字节。在我的理解中,这被称为类型转换(读取字节中的内存值),不要被误解为转换(读取值并解释字节中的值) 最简单的测试似乎是: import numpy a=3.14159265 print(a.hex()) # Returns 0x1.921fb53c8d4f1p+1 b=numpy.array(a) print(b.tobytes()) # returns b'\xf1\xd4\xc8S\xfb!\t@' # expec

我希望有一个非常简单的解决方案来显示浮点值(或内存中的多个连续字节)的原始字节。在我的理解中,这被称为类型转换(读取字节中的内存值),不要被误解为转换(读取值并解释字节中的值)

最简单的测试似乎是:

import numpy
a=3.14159265
print(a.hex())
# Returns 0x1.921fb53c8d4f1p+1
b=numpy.array(a)
print(b.tobytes())
# returns b'\xf1\xd4\xc8S\xfb!\t@'
# expected is something like 'F1' 'D4' 'C8' '53' 'FB' '21' '09' '40'
但是方法hex()返回一个用hex表示的IEEE浮点表示的解释。第二种方法显示了四个十六进制字节标记
\x
,但我想知道作为一个float64应该读取8个字节。此外,我对其他角色感到疑惑。
我用了一个很好的简单C语言,只要在浮点的内存地址上使用一个无符号的int指针,并从这个无符号的int“数组”(指针)中打印出8个值,我就可以实现它。
我知道,我可以在python中使用C,但还有其他简单的解决方案吗?
也许是因为它很有趣:我需要这个函数来将许多大的浮点向量保存到一个BLOB中的数据库中


我认为,在阅读时也会发现类似的问题,如果可能的话(可显示字符),它们不是以
\x
-形式打印的。我如何更改它?

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

import struct
struct.pack('d', a).hex()
它给出:

'f1d4c853fb210940'
如果您的Python版本早于3.5:

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

如果您有一个浮点数组,并且希望使用NumPy:

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