python 将 float(64) 类型转换为 bytes 的轻量级解决方案

python lightweight solution for typecasting float(64) to bytes

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

最简单的测试似乎是:

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() returns 对 IEEE FLOAT 十六进制表示的解释。第二种方法显示四个十六进制字节标记 \x 但我想知道 float64 应该读取 8 个字节。此外,我想知道其他角色。
我是一个很好的旧的简单 C 我会通过简单地在 float 的内存地址上使用一个 unsigned int 指针并从那个 unsigned int "Array"(指针。)
打印 8 个值来实现它 我知道,我可以在 python 中使用 C - 但是还有其他简单的解决方案吗?
也许因为它很有趣:我需要那个功能来将许多大的浮点向量保存到 BLOB 到数据库中。

我认为,在 Correct interpretation of hex byte, convert it to float 阅读中会发现类似的问题,如果可能的话(可显示的字符)它们不会以 \x 形式打印。我该如何更改?

您可以为此使用内置模块 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')