python - 蟒蛇 | 将列表中的十六进制字符串转换为浮点数
问题描述
我在列表中有十六进制字符串的数据点。
我尝试将列表转换为字符串,然后转换为字节数组。当我尝试将字节数组转换为浮点数时,它只返回一个值。
使用的代码是:
byteArrObj = bytearray(n, 'utf-8')
byteObj = bytes(byteArrObj)
byte8=bytearray.fromhex(b)
print(byte8)
floatvalue = struct.unpack('<f', byte8[:4])
这会产生一个元组,例如 `(0.09273222088813782,)。
如何打印列表中的所有浮点值?
解决方案
首先,让我们创建一个转换其中一个值的函数:
def hexdump_to_float(text):
return struct.unpack('<f', bytes.fromhex(text))[0]
注意:
我跳过了从您的代码中查找
byteArrObj
或查找的步骤byteObj
,因为它们对您的代码没有影响并且无助于解决问题。我使用类型
bytes
而不是bytearray
因为我们不需要修改底层数据。(这类似于使用 atuple
而不是list
。)我不关心切片数据,因为我们已经知道只有 4 个字节,并且因为
struct.unpack
无论如何都会忽略缓冲区中的任何额外数据。为了从
struct.unpack
返回的元组中获取值,我只需对元组进行索引。这给了我一个单一的float
价值。
所以这是一个简单的单行函数,但无论如何它都有助于创建一个函数,因为它为我们正在做的事情提供了一个清晰的名称。
下一步是将其应用于列表的每个元素。例如,您可以使用列表推导轻松地做到这一点:
my_floats = [hexdump_to_float(x) for x in my_hexdumps]
推荐阅读
- intellij-idea - 如何在 Intellij IDEA 2019.2 中编写反引号?
- flutter - 使用可交互的列表视图项和提供者模式持久化数据
- ruby-on-rails - 如何访问 Rails 控制器中的某些数据库表?
- sql - 带日期的 SQL 请求
- r - 在 R 包 Xaringan 中,无法使用无限月亮阅读器进行渲染
- .htaccess - 语言不匹配时htaccess强制重定向
- javascript - 是否可以将反应上下文注入到反应根之外的div(在主体下)
- magento2 - Magento 2 ; 无法将自定义参数传递到 UI 表单的保存按钮
- javascript - 如何使用 spry 或任何其他调整来验证表单中的图像文件
- jquery - Jquery each - Uncaught RangeError: 超出最大调用堆栈大小