[英]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.