簡體   English   中英

Struct.unpack和字節對象的長度

[英]Struct.unpack and Length of Byte Object

我有以下代碼(數據是一個字節對象):

    v = sum(struct.unpack('!%sH' % int(len(data)/2), data))

令我感到困惑的部分是格式字符串中的%sH和%int(len(data)/ 2

這部分代碼到底如何工作? 字節對象的長度是多少? 而這到底是什么呢?

假設您有一個字節字符串data例如:

>>> data = b'\x01\x02\x03\x04'
>>> data
'\x01\x02\x03\x04'

長度是字節字符串中的字節(或字符)數:

>>> len(data)
4

因此,這等效於您的代碼:

>>> import struct
>>> struct.unpack('!2H', data)
(258, 772)

這告訴struct模塊使用以下格式字符

  • ! -使用網絡(大端)模式
  • 2H打開2 x無符號短褲的包裝(每個16位)

它返回兩個整數,它們對應於我們提供的數據:

>>> '%04x' % 258
'0102'
>>> '%04x' % 772
'0304'

您所做的所有代碼就是自動動態計算unsigned shorts的數量

>>> struct.unpack('!%sH' % int(len(data)/2), data)
(258, 772)

但是int常規是不必要的,它實際上不應該使用%s占位符,因為它用於字符串替換:

>>> struct.unpack('!%dH' % (len(data)/2), data)
(258, 772)

因此,unpack返回兩個整數,這些整數與從數據字節str中解壓縮2個unsigned shorts有關。 然后,Sum返回這些總和:

>>> sum(struct.unpack('!%dH' % (len(data)/2), data))
1030

您的代碼如何工作:

  • 您正在解釋data的字節結構
    • struct.unpack使用字符串來確定要解釋的數據的字節格式
    • 給定格式stuct.unpack返回可解釋數據的可迭代值。
  • 然后,您將互感器相加。

字節格式化

要解釋你的數據,你是路過,你創建一個字符串來告訴Python何種形式data的用武之地。具體的%sH部分是一個簡短的手這個數字簽名短褲的你再格式要說的確切數量,其unsigned short你想。

在這種情況下,數字為:

int(len(data) / 2)

因為unsigned short通常為2個字節寬。

暫無
暫無

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

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