簡體   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