我正在尝试转换以下perl代码:
unpack(.., "Z*")然而,对于python来说,struct.unpack()中缺少"*“格式修饰符似乎使得这一点变得不可能。有没有办法在python中做到这一点?
附注: perl中的"*“修饰符来自perldoc -为重复计数提供一个*,而不是一个数字,意思是使用剩下多少项,...
因此,尽管python像perl一样有数字重复计数,但它似乎缺少*重复计数。
发布于 2011-05-01 23:16:03
python的struct.unpack没有Z格式
Z A null-terminated (ASCIZ) string, will be null padded.我想这是
unpack(.., "Z*")将是:
data.split('\x00')尽管这会去掉空值
发布于 2011-05-01 23:42:52
我假设您创建了struct数据类型,并且您知道结构的大小。如果是这种情况,那么您可以创建一个为该结构分配的缓冲区,并将值打包到缓冲区中。在解包时,您可以使用相同的缓冲区直接解包,只需指定起始点。
例如
import ctypes
import struct
s = struct.Struct('I')
b = ctypes.create_string_buffer(s.size)
s.pack_into(b, 0, 42)
s.unpack_from(b, 0)发布于 2011-05-01 23:13:11
您必须自己计算重复次数:
n = len(s) / struct.calcsize(your_fmt_string)
f = '%d%s' % (n, your_fmt_string)
data = struct.unpack(s, f)我假设your_fmt_string不会解包一个以上的元素,并且len(s)完全除以该元素的打包大小。
https://stackoverflow.com/questions/5849167
复制相似问题