python存储二进制数据_将“struct”数据存储到二进制fi

本文介绍了如何使用Python的struct模块进行高效的数据打包和解包操作,特别是在处理不同机器体系结构之间的数据交换时。文章详细解释了如何正确设置endian约定以及如何处理数组数据的长度和结构。

正如Cody Brocious所写,您可以一次打包整个页眉:header = struct.pack('

他还提到了endianness,如果您想打包数据以便在具有不同体系结构的机器上可靠地解包,那么endianness非常重要。格式字符串开头的<指定“使用一个小的endian约定打包此数据”。在

对于数组,您必须压缩它的长度,以确定再次读取时要解包多少个值。一次通话即可完成:

^{pr2}$

根据数组的大小,您可能会得到一个表示二进制文件的全部内容的大字符串,并且您可能需要寻找struct的替代方法,这些方法不需要将整个文件存储在内存中。在

拆箱:fmt = '

nSamples, nSampPeriod, nSampSize, nParmKind, arrSize = struct.unpack(fmt, packed)

# Use unpack_from to start reading after the packed header and count

flattened = struct.unpack_from('<%df' % arrSize, packed, struct.calcsize(fmt))

npVect = np.ndarray(flattened, dtype='float32').reshape(# your dimensions go here

)

编辑:哎呀,数组格式并没有那么简单:)总的想法是这样的:使用任何你喜欢的方法将数组展平成一个数字列表,打包数值的数量,然后打包每个值。另一方面,将数组作为一个平面列表来读取,然后对其施加任何所需的结构。在

编辑:将格式字符串更改为使用重复说明符,而不是字符串乘法。感谢约翰·麦肯指出这一点。在

编辑:添加了numpy代码,在打包之前展平数组,并在解包后重建它。在

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值