我想用Python解压缩二进制数据数组到uint16
数据。
Internet上充满了使用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的二进制数组,我将不胜感激
答案 0 :(得分:11)
使用array.fromstring或array.fromfile(参见http://docs.python.org/2/library/array.html):
import array
U = array.array("H")
U.fromstring(B)
答案 1 :(得分:4)
同一件事的可变长度版本:
n = 999
U = struct.unpack(str(n)+"H", B)
答案 2 :(得分:3)
如果要从二进制数据中解包n个元素,请指定元素的数量以及数据类型。对于n = 999:
U = struct.unpack("999H", B)