我想使用Python将二进制数据数组解包为uint16
数据。
互联网上充满了使用struct.unpack
的示例,但只有处理大小为4的二进制数组的示例。
其中大多数示例如下(B
是来自文件的二进制数组)
U = struct.unpack("HH",B[0:4]);
所以我尝试解包一个大小为6的数组:
U = struct.unpack("HHH",B[0:6]);
它有效。
但是如果我想要解包一个大小为L
(L
为一对数)的数组,该怎么做?
我尝试过这样:
U = struct.unpack("H"*(L/2),B[0:L]);
但是它无法工作,提示器给了我一个错误(例如对于L=512
):
struct.error: unpack requires a string argument of length 512
这条信息很奇怪,因为如果我想要将一个二进制数组解包为 uint16
类型,我需要一个长度为数组一半的字符串 "HHH...HHH"
。
如果有人能够提供帮助,我将非常感激。
我有一点进展了…实际上,我尝试了:
U = struct.unpack("H"*8,B[0:8]);
它起作用了。
U = struct.unpack("H"*10,B[0:10]);
它有效。
U = struct.unpack("H"*222,B[0:444]);
它仍然可用
U = struct.unpack("H"*223,B[0:446]);
它不起作用!而且对于大于446的尺寸永远不起作用。
希望这会帮助任何人回答我的问题。
@MarkRansom 我检查了len(B),实际长度确实是444。我非常确定B是一个大小为512的数组,因为B来自于:B = f.read(512)
其中F是一个8000字节大小的文件。所以问题出在read()上……感谢您的回答!但如果有人能帮忙解包大小为L的二进制数组,我将不胜感激。
[]
,而不是()
。那么你真正想做什么? - glglglB
的长度吗?它有可能不是512个字节吗? - glglgllen(B)
,这将很有启发性。 - Mark Ransomfile.read()
文档中:*"从文件中最多读取size字节(如果在获取size字节之前读取到EOF,则读取的字节数会更少)"。* 也就是说,f.read(512)
可能返回少于512
字节。 - jfs