我应该如何解析这种类型的字节?

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

我具有以下类型的字节:

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]

代码使用python 2.7正常工作,我刚刚移至3.7.5

python string byte decode python-3.7
1个回答
2
投票
b的所需内容显然是第一个NUL字节b'\x00'之前的部分,或者只是b'\0',因此您可以按第一个NUL字节的索引对b进行切片:

b = b[:b.find(b'\0')]

© www.soinside.com 2019 - 2024. All rights reserved.