如何在Python 3中将int列表解码为字符串?

问题描述 投票:0回答:2

所以我有一个字节流,我将其收集到一个列表中,如下所示:

byte_list.append(bytes[0])

这种格式将字节解码为整数(我发现 Python 的几个怪癖之一就是为什么它在没有我要求的情况下将字节解码为 ASCII 或整数)

所以过了一段时间我就有了这个列表

bytes

byte_list = [83, 0, 116, 0, 97, 0, 110, 0, 100, 0, 97, 0, 114, 0, 100, 0, 70, 0, 105, 0, 114, 0, 109, 0, 97, 0, 116, 0, 97, 0, 46, 0, 105, 0, 110, 0, 111]

如何将此列表解码为其字符串值?我想到的是:

for b in byte_list: 
    new_list.append(chr(byte_list[b]))

但这似乎不正确。有人可以提供有关如何解码此内容的指导吗?

python list byte
2个回答
5
投票

所以我有一个字节流

你想要文字。查看数据,它采用 UTF-16LE(little-endian)编码。解码:

>>> byte_list = [83, 0, 116, 0, 97, 0, 110, 0, 100, 0, 97, 0, 114, 0, 100, 0, 70, 0, 105, 0, 114, 0, 109, 0, 97, 0, 116,
 0, 97, 0, 46, 0, 105, 0, 110, 0, 111, 0]
>>> bytes(byte_list).decode('utf-16le')
'StandardFirmata.ino'

请注意,我添加了最后一个零,因为对于完整的 UTF-16 流来说,数据短了一个字节。我认为数据只是一个样本,并不完整。 UTF-16 每个字符需要两到四个字节。

如果您从字节流开始,它是一个值 0-255 的列表。为了方便起见,它仅显示,如 ASCII:

>>> bytes(byte_list)
b'S\x00t\x00a\x00n\x00d\x00a\x00r\x00d\x00F\x00i\x00r\x00m\x00a\x00t\x00a\x00.\x00i\x00n\x00o'

在字节格式中,您只需将其

.decode()
转换为Unicode文本即可。


0
投票

索引 1, 3, 5, ... 包含

0
。使用切片符号跳过它们:

>>> ''.join(map(chr, byte_list[::2]))  # [::2]: to only get 0, 2, 4, ...
'StandardFirmata.ino'
© www.soinside.com 2019 - 2024. All rights reserved.