我希望从缓冲区中解压缩一个字符串及其长度。
例如从此缓冲区获取(4, 'Gégé')
:
b'\x00\x04G\xE9g\xe9'
有人知道该怎么做吗?
答案 0 :(得分:3)
长度数据看起来像一个大端无符号16位整数,字符串数据看起来像是使用Latin1编码。如果这是正确的,你可以像这样提取它:
from struct import unpack
def extract(buff):
return unpack(b'>H', buff[:2])[0], buff[2:].decode('latin1')
buff = b'\x00\x04G\xE9g\xe9'
print(extract(buff))
<强>输出强>
(4, 'Gégé')
编码的另一种可能性是旧的Windows code page 1252,可以使用.decode('cp1252')
进行解码。
以上代码适用于Python 2&amp; Python 3.但在Python 3中有一种更简单的方法:我们不需要struct.unpack
,我们可以使用int.from_bytes
方法。
def extract(buff):
return int.from_bytes(buff[:2], 'big'), buff[2:].decode('latin1')