【问题标题】:Python | Convert hexstrings in a list to float蟒蛇 |将列表中的十六进制字符串转换为浮点数
【发布时间】:2021-01-24 01:45:55
【问题描述】:

我在列表中有十六进制字符串的数据点。

我尝试将列表转换为字符串,然后转换为字节数组。当我尝试将字节数组转换为浮点数时,它只返回一个值。

使用的代码是:

byteArrObj = bytearray(n, 'utf-8')
byteObj = bytes(byteArrObj)
byte8=bytearray.fromhex(b)
print(byte8)
floatvalue = struct.unpack('<f', byte8[:4])

这会产生一个元组,例如 `(0.09273222088813782,)。

如何打印列表中的所有浮点值?

【问题讨论】:

  • 澄清一下,您是期待来自64 EA BD 3D 还是0.092732220888137820.927322

标签: python list type-conversion hex


【解决方案1】:

首先,让我们创建一个转换其中一个值的函数:

def hexdump_to_float(text):
    return struct.unpack('<f', bytes.fromhex(text))[0]

注意:

  1. 我跳过了从您的代码中查找byteArrObjbyteObj 的步骤,因为它们对您的代码没有任何影响,也无助于解决问题。

  2. 我使用类型bytes 而不是bytearray,因为我们不需要修改底层数据。 (这类似于使用tuple 而不是list。)

  3. 我不会对数据进行切片,因为我们已经知道只有 4 个字节,而且struct.unpack 无论如何都会忽略缓冲区中的任何额外数据。

  4. 为了从struct.unpack 返回的元组中获取值,我只需对元组进行索引。这给了我一个 float 值。

所以这是一个简单的单行函数,但无论如何它都有助于创建一个函数,因为它为我们正在做的事情提供了一个清晰的名称。

下一步是将其应用于列表的每个元素。您可以使用例如列表推导式轻松做到这一点:

my_floats = [hexdump_to_float(x) for x in my_hexdumps]

【讨论】:

  • 成功了。太感谢了。非常感谢。
猜你喜欢
  • 2020-10-17
  • 2014-03-01
  • 2014-06-18
  • 2018-01-11
  • 2010-11-07
  • 2016-03-04
  • 2010-12-08
相关资源
最近更新 更多