微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python struct unpack

如何解决python struct unpack

我正在尝试转换以下perl代码
unpack(..,\"Z*\")
到python,但是struct.unpack()中缺少\“ * \”格式修饰符似乎使这不可能。有没有办法可以在python中做到这一点? 附言来自perldoc的perl中的\“ * \”修饰符-为重复计数提供*而不是数字,意味着可以使用,但是剩下很多项目,... 因此,尽管python具有像perl这样的数字重复计数,但它似乎缺少*重复计数。     

解决方法

python的
struct.unpack
没有
Z
格式
Z  A null-terminated (ASCIZ) string,will be null padded.
我认为这
unpack(..,\"Z*\")
将会:
data.split(\'\\x00\')
虽然那会去除空值     ,我假设您创建了结构数据类型,并且知道结构的大小。如果是这种情况,则可以创建为该结构分配的缓冲区,然后将值打包到缓冲区中。拆包时,只需指定起点即可使用同一缓冲区直接拆包。 例如
import ctypes
import struct
s = struct.Struct(\'I\')
b = ctypes.create_string_buffer(s.size)
s.pack_into(b,42)
s.unpack_from(b,0)
    ,您必须自己计算重复次数:
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)
则完全除以该元素的打包大小。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。