繁体   English   中英

使用python解压缩二进制数据

[英]Unpack binary data with python

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

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

import array
U = array.array("H")
U.fromstring(B)

可变长度版同样的东西:

n = 999
U = struct.unpack(str(n)+"H", B)

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

U = struct.unpack("999H", B)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM