接收设置,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进制接收与普通接收的结果。