簡體   English   中英

解包 Python 中的字節值

[英]Unpacking byte values in Python

我正在嘗試解壓縮以下數據,但似乎無法弄清楚。 這是從設備讀取儀表值的數字混音器返回的字節數據。

文檔建議返回的 blob 將被格式化為:

  • int1 – blob 的長度(以字節為單位),32 位 integer big-endian
  • int2 - 'nativefloats' 的數量,32 位 integer little-endian
  • 'nativefloat' - 米值,32 位浮點小端
  • '本機浮動'
  • …(在此特定消息中應該總共有 70 個“nativefloat”值)

執行 print(data) 會顯示來自設備的實時數據中的以下 blob:

['F\x00\x00\x00\xd4\xc6\x9a7\xce-\xee8G\xa6=6\x88\x80X7\x83\x99#7\xd1\xd3A7\x88\x80X7\x8cM\x9d7\x9b\xeeK7\xeb,\x847\xd4\xc6\x9a7*q\x8a7dlN7=\xfcU7\xd1\xde\x9f7\xdc\xa4\x817q=\x937b\x9cg7\x1d\xba77\x9b\xeeK7x\xb8q7\x1d^\x807\xe1P?7\x90H\xba7\x1d^\x807o\x86]7\xf8\xf1P7\x88\x80X7\xc5\xa8\xa87:\xdcF7\xdc\x1fe7TaI7\x01\t\xb87.\xebW7\xca\xf3a7\xd6\xef[7=\xfbQ7\xe8\xfa\x957n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54\x9d\xa2\x867n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54\x1e\x93\x867n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54n\xbb\xd54']

我嘗試了struct.unpack的幾種變體,但收到“結構格式中的錯誤字符”,並且文檔中沒有任何示例談論與此類似的布局。 我還嘗試提取字節並使用在線轉換器對其進行轉換,但無法獲得任何類似於預期值的內容。 我確定我誤解了一些簡單的事情嗎?

上面的示例中缺少int1 它以 little-endian 的 70 開頭,然后以 70 個浮點數繼續。 所以你可以用以下方式解壓它:

int2 = int(*unpack('<i', data[:4]))
floats = unpack('<' + int2*'f', data[4:])

如果開頭有一個int1 (如提供的規范中所述),那么您可以使用

int1 = int(*unpack('>i', data[:4]))
int2 = int(*unpack('<i', data[4:8]))
floats = unpack('<' + int2*'f', data[8:])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM