使用python解压缩二进制数据

Ala*_*ing 6 python arrays struct unpack uint16

我想uint16用Python 将一组二进制数据解包到数据中.

Internet充满了使用示例,struct.unpack但只涉及处理大小为4的二进制数组的示例.

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

U = struct.unpack("HH",B[0:4]);
Run Code Online (Sandbox Code Playgroud)

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

U = struct.unpack("HHH",B[0:6]);
Run Code Online (Sandbox Code Playgroud)

有用.

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

U = struct.unpack("H"*(L/2),B[0:L]);
Run Code Online (Sandbox Code Playgroud)

但它不起作用,提示器给我一个错误(L=512例如):

struct.error: unpack requires a string argument of length 512
Run Code Online (Sandbox Code Playgroud)

这条消息很奇怪,因为如果我想解压缩二进制数组uint16,我需要一个"HHH...HHH"这个数组的一半大小的字符串...

如果有人能给我一些帮助,我将非常感激.


我进步了一点......事实上,我尝试过:

U = struct.unpack("H"*8,B[0:8]); 
Run Code Online (Sandbox Code Playgroud)

有用.

U = struct.unpack("H"*10,B[0:10]);
Run Code Online (Sandbox Code Playgroud)

有用.

U = struct.unpack("H"*222,B[0:444]);
Run Code Online (Sandbox Code Playgroud)

它仍然有效

U = struct.unpack("H"*223,B[0:446]);
Run Code Online (Sandbox Code Playgroud)

它不起作用!它永远不会适用于大于446的尺寸

希望它能帮助任何人回答我.


@MarkRansom我检查了len(B),实际上,长度是444.我很确定B是一个大小为512的数组,因为B来自: B = f.read(512)其中F是一个8000字节大小的文件.所以read()有问题...感谢您的回答!但如果有人帮助解压缩大小为L的二进制数组,我将不胜感激

Mik*_*bov 11

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

import array
U = array.array("H")
U.fromstring(B)
Run Code Online (Sandbox Code Playgroud)


小智 7

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

n = 999
U = struct.unpack(str(n)+"H", B)
Run Code Online (Sandbox Code Playgroud)


小智 5

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

U = struct.unpack("999H", B)
Run Code Online (Sandbox Code Playgroud)