该struct
模块仅支持固定长度的结构。对于变长字符串,您可以选择以下任一种:
动态构造格式字符串(str
将abytes
传递给之前,必须将其转换为a pack()
):
s = bytes(s, 'utf-8') # Or other appropriate encoding
struct.pack(“I%ds” % (len(s),), len(s), s)
跳过struct
并仅使用普通的字符串方法将字符串添加到您的pack()
-ed输出中:struct.pack("I", len(s)) + s
要打开包装,您只需要一次打开一些包装:
(i,), data = struct.unpack("I", data[:4]), data[4:]
s, data = data[:i], data[i:]
如果您要执行很多操作,则始终可以添加一个calcsize
用于执行字符串切片的辅助函数:
def unpack_helper(fmt, data):
size = struct.calcsize(fmt)
return struct.unpack(fmt, data[:size]), data[size:]