接收设置,sock接收的数据是bytes类型,收到的普通数据为b'xxx‘,转换成str类型,需要’xxx'.decode('utf-8'),但是收到的‘aa'十六进制的bytes数据为b'\xaa',需转换成普通 str 'aa',转换用'xx'.hex()即可转换。

if recv_msg:

msg = f"来自IP:{address[0]}端口:{address[1]}:"

self.tcp_signal_write_msg.emit(msg)

try:

info = recv_msg.decode("utf-8")

self.tcp_signal_write_info.emit(info, self.InfoRec)

except Exception as ret:

if recv_msg.hex(): #将16进制bytes b'\xaa'转换成utf-8 str 'aa'

info = recv_msg.hex()

self.tcp_signal_write_info.emit(info, self.InfoRec)

else:

msg="数据格式错误"+ret.__str__()

self.tcp_signal_write_msg.emit(msg)

解析接收的数据:以十六进制显示与普通方式显示

if self.receive_HEX_flag: # 以十六进制接收

info=bytes(info,encoding='utf-8') #转换成bytes类型

info_hex = base64.b16encode(info) #16进制编码

else:

info_hex = info

base64以16进制编码需bytes类型,重新将str转换为bytes,用 bytes(info,encoding='utf-8')转换。

发送设置:

if self.send_HEX_flag: #以十六进制发送

info_hex=base64.b16encode(info.encode())

else:

info_hex=info

16进制发只需将所需数据转换成16进制即可,普通发送不用转换。

测试结果如下:

左侧是某标准通讯助手,使用16进制发送与普通发送,右侧是使用16进制接收与普通接收的结果。

 

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: