如何在Python3中将int列表解码为字符串?
所以我有一个字节流,我将其收集到一个列表中,如下所示:如何在Python3中将int列表解码为字符串?,python,list,byte,Python,List,Byte,所以我有一个字节流,我将其收集到一个列表中,如下所示: byte_list.append(bytes[0]) 这种格式将字节解码为整数(我在Python中发现的少数几个怪癖之一是为什么它不经我的询问就将字节解码为ASCII或整数) 所以过了一会儿,我有了这个字节列表 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
byte_list.append(bytes[0])
这种格式将字节解码为整数(我在Python中发现的少数几个怪癖之一是为什么它不经我的询问就将字节解码为ASCII或整数)
所以过了一会儿,我有了这个字节列表
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]))
但这似乎并不正确。有人能提供如何破解这个问题的指导吗?标记1、3、5。。。包含
0
。使用切片表示法跳过它们:
>>> ''.join(map(chr, byte_list[::2])) # [::2]: to only get 0, 2, 4, ...
'StandardFirmata.ino'
所以我有一个字节流
你想要文本。查看数据,它是在UTF-16
编码中。破译
>>> 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('utf16')
'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'
在这种原始格式中,您只需将其解码为Unicode文本