在python中修改struct中的数据

2024-09-30 06:11:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有可能修改一个已经生成的结构。 我想要的是计算header的CRC,然后将CRC值写入header中的第三个位置

import struct
import crcmod

crcfunc = crcmod.mkCrcFun(0x112, 0x00, 0x00)
header = struct.pack('!hii', 1, 2, 0)
crcvalue = crcfunc(header)

Tags: import结构structpackheadercrchiicrcvalue
2条回答

因为调用struct.pack的结果是创建一个字节字符串,所以它是不可变的

您可以通过切片将crc拼接到字节字符串中,或者创建一个新的字节字符串:

header2 = struct.pack('!hii', 1, 2, crcvalue)

或者,如果要创建可变字节字符串,可以创建缓冲区,并使用struct.pack_into而不是struct.pack

不能直接执行:struct.pack返回一个bytes对象,它与str一样是不可变的。但是,您可以非常轻松地创建更新的对象:

header = header[:-4] + c.to_bytes(4, byteorder=sys.byteorder)

如果您真的想计算除最后一个元素之外的所有元素的CRC值,您可以这样做:

header = struct.pack('!hi', 1, 2)
header += crcfunc(header).to_bytes(4, byteorder=sys.byteorder)

相关问题 更多 >

    热门问题