python - Python struct.unpack 字节长度问题
问题描述
我有以下代码:
msg = b'0,[\x00\x01\x86\xec\x96N'
print(struct.unpack("<"+"I",msg))
但是每次我尝试这样做时,它都会说
struct.error: unpack 需要 4 个字节的缓冲区
我试图做的是以下
times = int(len(msg)/4)
struct.unpack("<"+"I" * times,msg)
但它并不总是有效,我认为在奇数上,我怎样才能获得正确的尺寸,这样我就不会遇到这些问题?
解决方案
struct.unpack
要求被消耗的缓冲区的长度正好是格式的大小。[1]
改为使用struct.unpack_from
,这要求正在消耗的缓冲区的长度至少是格式的大小。[2]
>>> msg = b'0,[\x00\x01\x86\xec\x96N'
>>> import struct
>>> print(struct.unpack("<"+"I", msg))
Traceback (most recent call last):
File "<input>", line 1, in <module>
struct.error: unpack requires a buffer of 4 bytes
>>> print(struct.unpack_from("<"+"I", msg))
(5975088,)
额外的字节将被忽略unpack_from
[1] https://docs.python.org/3/library/struct.html#struct.unpack
[2] https://docs.python.org/3/library/struct.html#struct.unpack_from
推荐阅读
- javascript - 从 API Angular 获取图像
- vue.js - vue-multiselect 显示选中的数字
- pandas - 设置熊猫数据框的上三角、下三角和对角线样式
- ios - 基于 UUID 监控 iBeacon 区域时,何时收到通知?
- swift - 如何使用同一个 UIButton 在不同时间执行多个不同的动画?
- javascript - 使用谷歌标签管理器将javascript插入特定的div
- mapbox - 拖动注释时使用单击
- asterisk - confbridge 应用程序中是否有任何功能可以使用户之间的音频静音?
- javascript - moment js 接受什么格式的日期/时间对象?
- algorithm - 避免名称冲突的算法