python 从二进制文件中读取浮点数据

import numpy as np
import struct

def toDoubleList(dataStr):
    bytesTotal = len(dataStr)
    print("bytesTotal: ", bytesTotal)
    # 下面的双斜线是除法结果为整数
    segLen = bytesTotal // 8
    print("segLen: ", segLen)
    # 如果考虑字节序,字节序为big-endian,则以下语句改为  data = struct.unpack('>'+str(bytesTotal/8)+'d',dataStr)
    # 相关匹配格式和字节序请见: https://docs.python.org/zh-cn/3/library/struct.html#struct.calcsize
    data = struct.unpack(segLen * 'd', dataStr)
    return data


#########
def toFloat32List(dataStr):
    bytesTotal = len(dataStr)
    print("bytesTotal: ", bytesTotal)
    # 下面的双斜线是除法结果为整数
    segLen = bytesTotal // 4
    print("segLen: ", segLen)
    # 如果考虑字节序,字节序为big-endian,则以下语句改为  data = struct.unpack('>'+str(bytesTotal/4)+'f',dataStr)
    data = struct.unpack(segLen * 'f', dataStr)
    return data


def toUint16List(dataStr):
    bytesTotal = len(dataStr)
    print("bytesTotal: ", bytesTotal)
    # 下面的双斜线是除法结果为整数
    segLen = bytesTotal // 2
    print("segLen: ", segLen)
    # 如果考虑字节序,字节序为big-endian,则以下语句改为  data = struct.unpack('>'+str(bytesTotal/2)+'H',dataStr)
    data = struct.unpack(segLen * 'H', dataStr)
    return data


def toUint32List(dataStr):
    bytesTotal = len(dataStr)
    print("bytesTotal: ", bytesTotal)
    # 下面的双斜线是除法结果为整数
    segLen = bytesTotal // 4
    print("segLen: ", segLen)
    # 如果考虑字节序,字节序为big-endian,则以下语句改为  data = struct.unpack('>'+str(bytesTotal/4)+'I',dataStr)
    data = struct.unpack(segLen * 'I', dataStr)
    return data


def toUintLongLongList(dataStr):
    bytesTotal = len(dataStr)
    print("bytesTotal: ", bytesTotal)
    # 下面的双斜线是除法结果为整数
    segLen = bytesTotal // 8
    print("segLen: ", segLen)
    # 如果考虑字节序,字节序为big-endian,则以下语句改为  data = struct.unpack('>'+str(bytesTotal/8)+'Q',dataStr)
    data = struct.unpack(segLen * 'Q', dataStr)
    return data


#### 测试代码

file_bin = "path/to/binfile"
with open(file_bin, 'rb') as f_r:
    dataStr = f_r.read()
    data_vs = toFloat32List(dataStr)

struct --- 将字节串解读为打包的二进制数据 — Python 3.12.0 文档

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值