在python中以正确的格式打包和解压缩

时间:2016-09-21 12:32:15

标签: python python-3.x pack unpack

我希望从缓冲区中解压缩一个字符串及其长度。

例如从此缓冲区获取(4, 'Gégé')
b'\x00\x04G\xE9g\xe9'

有人知道该怎么做吗?

1 个答案:

答案 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')