如何使用 python struct 包仅解包前 6 个字节

Posted

技术标签:

【中文标题】如何使用 python struct 包仅解包前 6 个字节【英文标题】:How to use python struct package to only unpack first 6 bytes 【发布时间】:2021-11-28 08:39:30 【问题描述】:

我想使用 struct 包只为我提供一些有效负载的前 6 个字节,因为我并不总是知道大小,例如

b'A\x10VuGe\x00d\x0c\xf4\x06\x0cf\x00'

如果我知道缓冲区的大小,以下代码可以工作:

import struct
from datetime import datetime
from pytz import UTC
import json
from django.utils.encoding import smart_str

data2 = b'A\x10VuGe\x00d\x0c\xf4\x06\x0cf\x00'
devid,hw,sw,bat,ss,distance,interrupt  = struct.unpack('>6sBBHbHb',data2)

print(f"DeviceID=devid.hex() HW=hw SW='.'.join(str(sw)) "
      f"BAT=bat:.3fmV SignalStrength=-113+2*ssdBm "
      f"Distance=distance "
      f"Interrupt=interrupt")

【问题讨论】:

您可以对字符串中已知的字节应用相同的切片表示法。 我不明白,你能解释一下吗? 【参考方案1】:

只需使用:data = data[0:14],您将拥有前 14 个字节。 不如按照你的方式解包

【讨论】:

以上是关于如何使用 python struct 包仅解包前 6 个字节的主要内容,如果未能解决你的问题,请参考以下文章

qt中如何解包利用python 的struct.pack()函数打包的数据

使用 struct.unpack_from() 解包混合二进制数据

Python 3.8 结构解包 - struct.error: unpack 需要 1 个字节的缓冲区

struct--二进制数据结构的打包与解包

C#中Python的解包函数

在 Python 中打包/解包复杂数据