python - 支持 python 的 struct.pack_into 中的新格式字符
问题描述
我有一个 pythonstruct
格式字符串,我想将其拆分为多个调用struct.pack_into
,如下所示:
buff = bytearray()
fmt = "!BBi4sVi3s"
args = [1, 0, 4, "abcd", 6, 3, "abc"]
offset = 0
fmt_parts = fmt.split("V")
for fmt_part in fmt_parts:
struct.pack_into(fmt_part, buff, offset, *args)
offset += struct.calcsize(fmt_part)
这是行不通的,因为args
每次循环都会完整地传递列表,尽管每次调用只会关心该列表的子列表。
args
给定一个格式字符串,有没有办法准确计算出调用使用该格式字符串时将消耗列表中的多少参数struct.pack_into
?解决方案尽可能高效也很重要。
我试过这样的东西
# every format char that doesn't consume an arg, per the struct docs
NOARG_STRUCT_FMTS = re.compile(r'[^xcbB\?hHiIlLqQfdspP]')
stripped_fmt_part = re.sub(NOARG_STRUCT_FMTS, '', fmt_part)
part_args = [args.pop(0) for _ in range(len(stripped_fmt_part))]
但这种方法可能不可靠或比最优方法慢。
附加上下文:我正在尝试将自定义格式字符添加V
到struct.pack_into
导致参数编码为varint
. 我知道存在varint
编码/解码的现有 python 实现,但我想制作自己的与 定义的接口兼容的接口struct.pack_into
,我在社区中没有见过。
解决方案
推荐阅读
- javascript - 将 Javascript Web 抓取导出到 Excel
- javascript - 如何使用 solana web3 js 在 solana 中获取令牌的符号/名称?
- apache-spark - 如何使用pyspark将火花流数据转换为spark-streaming-kafka-0-10_2.12中的foreachRDD
- postgresql - 按 YYYY-MM-WW 形式按周数分组日期
- sql-server - 行总和和不区分大小写
- python - 目标:使用 python 在预定义的 chrome 配置文件中打开一个 url
- mysql - Mysql - “utf8_unicode_ci”和“utf8_persian_ci”有什么区别?
- python - Google Cloud Run 中的@response.call_on_close 问题
- android-studio - 将本地库/ gradle 项目包含到 Kotlin Multiplatform 项目中
- javascript - 有没有办法查看是否使用 JavaScript 为屏幕阅读器标记了 PDF?