13

我想uint16用 Python 将一组二进制数据解压缩为数据。

互联网上到处都是使用struct.unpack但只有处理大小为 4 的二进制数组的示例。

这些示例中的大多数如下(B是来自文件的二进制数组)

U = struct.unpack("HH",B[0:4]);

所以我试图解压一个大小为 6 的数组:

U = struct.unpack("HHH",B[0:6]);

有用。

但是如果我想解压一个大小为L( Lis pair) 的数组怎么办?我试过了:

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 的二进制数组,我将不胜感激

4

3 回答 3

13

使用 array.fromstring 或 array.fromfile (参见http://docs.python.org/2/library/array.html):

import array
U = array.array("H")
U.fromstring(B)
于 2012-11-15T16:59:26.037 回答
8

同一事物的可变长度版本:

n = 999
U = struct.unpack(str(n)+"H", B)
于 2015-07-22T23:25:40.970 回答
5

如果要从二进制数据中解压缩 n 个元素,请指定元素的数量和数据类型。对于 n=999:

U = struct.unpack("999H", B)
于 2014-07-07T08:38:51.003 回答