Python 我应该如何解析这种类型的字节?
我有以下类型的字节:Python 我应该如何解析这种类型的字节?,python,string,byte,decode,python-3.7,Python,String,Byte,Decode,Python 3.7,我有以下类型的字节: b = b'2787\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x03\x01\x00\x00\x00\x00\x00\x96\x08\n\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x0047\x00>2!\tMV\xa7\x00\x00\x00\x00' 我必须将其转换为字符串并获取2787,以
b = b'2787\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x03\x01\x00\x00\x00\x00\x00\x96\x08\n\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x0047\x00>2!\tMV\xa7\x00\x00\x00\x00'
我必须将其转换为字符串并获取2787,以及如何剥离\x00值,
我刚刚尝试了解码(“utf-8”),但抛出了以下错误消息:
“utf-8”编解码器无法解码位置33中的字节0x96:无效的开始字节
rstrip('\x00)也不起作用
我应该使用哪种类型的解码
我从这里获取字符串列表:
data, addr = socket_udp.recvfrom(struct.calcsize("B13s9s61s"))
info = struct.unpack("B13s9s61s", data)
b是最后的61个字符串。
字符串的内容:
class Udp_packet:
type = 0x00
id = ""
random_num = ""
data = ""
def __init__(self, values_list, convert=False):
self.type = values_list[0]
self.id = values_list[1]
self.random_num = values_list[2]
self.data = values_list[3].split("\0")[0]
代码使用Python2.7正常工作,我刚刚移动到3.7.5,您想要从
b
中得到的显然是第一个NUL字节之前的部分,b'\x00'
,或者简单地说b'\0'
,因此您可以通过第一个NUL字节的索引对b
进行切片:
b = b[:b.find(b'\0')]
这根绳子怎么样generated@gold_cy我收到了,扔了个插座。那根绳子应该是什么?在这13个起始字节中,哪些是相关的?您有一些格式规范吗?@CristiFati只是通信中使用的附加数据,问题是最后一个字符串经度并不总是61s。您有另一个选项,即使用列表理解和迭代字节。不确定它是否可以帮助您剥离
\x00
。类似于:'.join([b代表b,如果b!=b'\x00'])
可能会对您有所帮助。