python - python struct unpack bad char
问题描述
我正在尝试编写一个小包解析器,第一次使用 python 结构:
content = struct.unpack("BBBBBB<HBB", packet[:10])
数据包包含以下字节:
7e03 ffff ff0f 1e00 1001 0c00 0000 0000
我收到此错误:struct.error: bad char in struct format
但我不知道我应该如何知道提到的坏字符是什么。另外请注意: struct 是否支持对元组元素进行分组,因为我宁愿像这样进行解包:
content = struct.unpack("BB(BBBB)<HBB", packet[:10])
因为这是一个地址,并且将它放在它自己的内容元组中会使 imo 更清晰。
解决方案
<
不能在格式字符串的中间,必须在前面。
它指定 little-endian 字节顺序并适用于整个数据包(但对于使用 指定的单字节值没有区别B
):
>>> packet = b'\x7e\x03\xff\xff\xff\x0f\x1e\x00\x10\x01\x0c\x00\x00\x00\x00\x00'
>>> struct.unpack("<BBBBBBHBB", packet[:10])
(126, 3, 255, 255, 255, 15, 30, 16, 1)
要将四个字节解释为一个无符号整数,请使用I
or L
:
>>> struct.unpack("<BBIHBB", packet[:10])
(126, 3, 268435455, 30, 16, 1)
推荐阅读
- office-js - 获取页面方向和大小
- java - 为什么 chrome 不下载响应中包含的文件?
- angular - 处理 GET 请求的 URI 保留字符
- opencv-python - 在 OpenCV python 中共享同一个相机的两个单独的函数
- yugabyte-db - 如何在 YugabyteDB 的服务器级别更改时区
- security - 使文件可用于 IIS 中经过身份验证的 API 连接
- php - gcloud 应用程序部署失败,7.4 运行时“需要 composer-runtime-api ^2.0.0”
- python - 在 Python NetworkX 中重新创建流程
- http - 谷歌云平台http post
- python - 如何获取执行时间并将其添加到我的课程中?