import struct
string = b'-'
fmt=">h%ds" % len(string)
在这里,你正在收拾长度和字符串:
t = struct.pack(fmt, len(string), string)
print(repr(t))
# '\x00\x01-'
所以,当你解开,你应该会得到两个值回,即长度和字符串:
length,string2=struct.unpack(fmt,t)
print(repr(string2))
# '-'
一般来说,如果你不知道字符串是如何打包的,那么没有确定的方法来恢复dat一个。你只需要猜测!
如果你知道 组成的字符串长度的数据,然后字符串本身,那么你 可以尝试尝试和错误:
import struct
string = b'-'
fmt=">h%ds" % len(string)
t = struct.pack(fmt, len(string), string)
print(repr(t))
for endian in ('>','<'):
for fmt,size in (('b',1),('B',1),('h',2),('H',2),('i',4),('I',4),
('l',4),('L',4),('q',8),('Q',8)):
fmt=endian+fmt
try:
length,=struct.unpack(fmt,t[:size])
except struct.error:
pass
else:
fmt=fmt+'{0}s'.format(length)
try:
length,string2=struct.unpack(fmt,t)
except struct.error:
pass
else:
print(fmt,length,string2)
# ('>h1s', 1, '-')
# ('>H1s', 1, '-')
这或许可以组成一个不明确的字符串t
,它有多个有效的解包,这将导致不同的string2
s,但是。我不确定。
也许我误解了,但http://docs.python.org/library/struct.html#struct.unpack – ide 2011-03-02 00:09:48