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))
# '-'
일반적으로 문자열이 압축 된 방법을 모르는 경우 데이터를 복구 할 확실한 방법이 없습니다. 에이. 당신은 단지 추측해야 할 것입니다!
당신은 은 문자열의 길이로 구성되어 데이터를 알고 있다면, 다음 문자열 자체는, 당신 은 시행 착오를 시도 할 수 :
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
이됩니다. 나는 잘 모르겠다.
어쩌면 나는 완전히 오해하지만, http://docs.python.org/library/struct.html#struct.unpack 사용할 수 있습니다 – ide