2017-09-14 107 views
2

我希望在显示浮点值(或者在内存中更连续的)的原始字节时有一个非常简单的解决方案。在我的理解中,这被命名为类型转换(读取字节中的内存值)不被误解为转换(读取值并以字节解释)。用于类型转换的python轻量级解决方案float(64)转换为字节

最简单的测试似乎是:

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!\[email protected]' 
# expected is something like 'F1' 'D4' 'C8' '53' 'FB' '21' '09' '40' 

但是该方法十六进制()返回在十六进制的IEEE FLOAT represantation解读。第二种方法显示四个十六进制字节标记\x,但我想作为一个float64应读取8个字节。此外,我想知道其他角色。
我很好的老简单的CI将实现,通过简单地使用浮点内存地址的无符号int指针,并从该无符号整数“数组”(指针)打印8值
我知道,我可以使用C在蟒蛇 - 但有其他简单的解决方案吗?
也许是有趣的:我需要这个函数来将许多大的浮点向量保存到BLOB中。

我觉得,类似的问题可以在Correct interpretation of hex byte, convert it to float阅读中找到,如果可能的话(可显示的字符)它们不会被打印在\x -form中。我该如何改变它?

回答

3

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