【发布时间】:2012-11-04 07:02:48
【问题描述】:
我想用 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 的二进制数组,我将不胜感激
【问题讨论】:
-
最好是复制粘贴。我认为您的示例不起作用:字符串索引适用于
[],而不适用于()。那么你到底是做什么的呢? -
你检查过
B的长度吗?它可能没有512字节吗? -
打印
len(B),它可能会发光。 -
struct.unpack_from("H", B) 不起作用?也许你需要写: struct.unpack_from("%dH"%(len(B)/2), B)
-
B[0:446] == B[0:444] if len(B) is 444. Past 444 your string is too short.
标签: python arrays struct unpack uint16