【发布时间】:2016-08-21 22:49:18
【问题描述】:
所以,我想要做的是将浮点数转换为字节数组,但我一直没有收到任何输入,而且我的计算机极度减慢/冻结。 我的代码是
import struct
def float_to_hex(f):
return hex(struct.unpack('<I', struct.pack('<f', f))[0])
value = 5.1 #example value
...
value = bytearray(int(float_to_hex(float(value)), 16)
我在另一篇文章中发现了一个将浮点数转换为十六进制的函数
def float_to_hex(f):
return hex(struct.unpack('<I', struct.pack('<f', f))[0])
然后我将它从十六进制转换为整数。 这有什么问题?我怎样才能更好地将它从浮点数转换为 bin 或 bytearray?
【问题讨论】:
-
为什么要将浮点数作为字节数组?你想达到什么目的?
-
这是将浮点数的二进制形式显示为十六进制文本,还是获取原始字节?使用
hex意味着您需要十六进制文本,而不是原始字节,在这种情况下,您根本不需要bytearray(这是一种二进制数据类型),您需要str(文本输入 Python 3)。 -
另外,你真的想要 C
float或 Cdouble代表吗? -
我正在寻找的是获取原始字节。我在寻找一种从浮点数中以十六进制表示 IEEE (754) 浮点数的方法时得到了这个函数。我知道如果我可以将十六进制字符串插入gregstoll.dyndns.org/~gregstoll/floattohex 并获得原始数字,那将是正确的。
-
@tatatat0:如果你在网页上输入这个,你不想要原始字节,你想要所述字节的十六进制表示;我无法访问该站点(代理阻止它),但网络表单通常不接受原始二进制数据的输入,它们采用十六进制编码版本。作为记录,Python 的
float类型实际上是基于 Cdouble类型,而不是 Cfloat类型(通常是double精度的一半),因此您可能需要格式代码d,不是f。正如我在另一条评论中提到的那样,在 3.5 上,struct.pack("f", value).hex()应该会为您提供所需的十六进制文本。
标签: python python-3.x