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')
我想要一个非常简单的解决方案来显示浮点值(或内存中更多连续的值)的原始字节。在我的理解中,这被称为类型转换(以字节为单位读取内存值)不要被误解为转换(读取值并以字节为单位进行解释)。
最简单的测试似乎是:
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')