关于TypeError: can only concatenate str (not "bytes") to str报错
目的:想要将一串16进制组成的字符串报文,打包成字节流发送。 原代码: data = ‘7E4578154578454549424578457E’ str1 = ‘’ str2 = ‘’ data = str(data) while data: str1 = data[0:2] s = int(str1, 16) # str1是一个16进制的数,int()函数将其用十进制数表示 str2 += struct.pack(‘B’, s)# B表示类型格式unsigned char data = data[2:] print(str2) host = “192.168.24.23” port = 6975 tcplink = jctool().tcp_link(host,port) tcplink.send(str2) 报错: Traceback (most recent call last): File “E:/PycharmProject/jctool.py”, line 210, in str2 += struct.pack(‘B’, s)# B表示类型格式unsigned char TypeError: can only concatenate str (not “bytes”) to str 问题原因: str2定义为str,而通过struct.pack后的格式是unsigned char,两边字符的格式不一致,导致不能用“+”进行拼接。 解决方法: 1、将 struct.pack(‘B’, s)替换为str(struct.pack(‘B’, s)),完成字符串拼接 2、由于 tcplink.send(str2),其中的str2必须为字节流才行,使用encode()进行转换即可 修改后的代码: data = ‘7E4578154578454549424578457E’ str1 = ‘’ str2 = ‘’ data = str(data) while data: str1 = data[0:2] s = int(str1, 16) # str1是一个16进制的数,int()函数将其用十进制数表示 str2 += str(struct.pack(‘B’, s))# B表示类型格式unsigned char data = data[2:] str2 = str2.encode() print(str2) host = “192.168.24.23” port = 6975 tcplink = jctool().tcp_link(host,port) tcplink.send(str2)