Python socket通讯16进制传输数据

Python socket通讯16进制传输数据,第1张

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


 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/570451.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存