2024-09-30 06:11:35 发布
网友
我想知道是否有可能修改一个已经生成的结构。 我想要的是计算header的CRC,然后将CRC值写入header中的第三个位置
header
import struct import crcmod crcfunc = crcmod.mkCrcFun(0x112, 0x00, 0x00) header = struct.pack('!hii', 1, 2, 0) crcvalue = crcfunc(header)
因为调用struct.pack的结果是创建一个字节字符串,所以它是不可变的
struct.pack
您可以通过切片将crc拼接到字节字符串中,或者创建一个新的字节字符串:
header2 = struct.pack('!hii', 1, 2, crcvalue)
或者,如果要创建可变字节字符串,可以创建缓冲区,并使用struct.pack_into而不是struct.pack
struct.pack_into
不能直接执行:struct.pack返回一个bytes对象,它与str一样是不可变的。但是,您可以非常轻松地创建更新的对象:
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)
因为调用
struct.pack
的结果是创建一个字节字符串,所以它是不可变的您可以通过切片将crc拼接到字节字符串中,或者创建一个新的字节字符串:
或者,如果要创建可变字节字符串,可以创建缓冲区,并使用
struct.pack_into
而不是struct.pack
不能直接执行:
struct.pack
返回一个bytes
对象,它与str
一样是不可变的。但是,您可以非常轻松地创建更新的对象:如果您真的想计算除最后一个元素之外的所有元素的CRC值,您可以这样做:
相关问题 更多 >
编程相关推荐