Python socket通讯16进制传输数据

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值