我试图使用struct.unpack()
来拆分以ASCII字符串结尾的数据记录。在
记录(正好是tomtomov2记录)具有以下格式(存储的little endian):
unpack()
要求字符串的长度包含在传递给它的格式中。我可以使用第二个字段和记录其余部分的已知大小(13个字节)来获得字符串长度:
str_len = struct.unpack("<xi", record[:5])[0] - 13
fmt = "<biii{0}s".format(str_len)
然后继续进行完整的解包,但是由于字符串是以null结尾的,我真的希望unpack()
能帮我完成。如果我在一个不包含自身大小的结构中运行,也会很好。在
我怎么能做到呢?在
实际上,由于
struct.calcsize()
将告诉您它期望的长度,因此无大小记录相当容易处理。您可以使用它和数据的实际长度为unpack()
构造一个新的格式字符串,其中包含正确的字符串长度。在此函数只是
unpack()
的包装,允许在最后一个位置添加一个新的格式字符,该字符将删除终端NUL:^{pr2}$
我创建了两个新函数,可以作为标准pack和unpack函数的插入式替换。它们都支持“z”字符来打包/解包ASCIIZ字符串。“z”字符在格式字符串中的位置或出现次数没有限制:
下面是一个如何使用它们的示例:
^{pr2}$相关问题 更多 >
编程相关推荐