擅长:python、mysql、java
<p>我创建了两个新函数,可以作为标准pack和unpack函数的插入式替换。它们都支持“z”字符来打包/解包ASCIIZ字符串。“z”字符在格式字符串中的位置或出现次数没有限制:</p>
<pre><code>import struct
def unpack (format, buffer) :
while True :
pos = format.find ('z')
if pos < 0 :
break
asciiz_start = struct.calcsize (format[:pos])
asciiz_len = buffer[asciiz_start:].find('\0')
format = '%s%dsx%s' % (format[:pos], asciiz_len, format[pos+1:])
return struct.unpack (format, buffer)
def pack (format, *args) :
new_format = ''
arg_number = 0
for c in format :
if c == 'z' :
new_format += '%ds' % (len(args[arg_number])+1)
arg_number += 1
else :
new_format += c
if c in 'cbB?hHiIlLqQfdspP' :
arg_number += 1
return struct.pack (new_format, *args)
</code></pre>
<p>下面是一个如何使用它们的示例:</p>
^{pr2}$