gpt4 book ai didi

python - Struct.unpack 和字节对象的长度

转载 作者:行者123 更新时间:2023-11-28 21:54:12 29 4
gpt4 key购买 nike

我有以下代码(数据是一个字节对象):

    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 模块使用下面的 format characters :

  • ! - 使用网络(大端)模式
  • 2H - 解压 2 ​​x unsigned shorts(每个 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

关于python - Struct.unpack 和字节对象的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24592157/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com