具体来说,我从TCP套接字收到一个字节流,如下所示:
inc_tcp_data = b'\x02hello\x1cthisisthedata'
使用十六进制值表示输入数据的不同部分的流。但是我想以下列格式使用inc_data:
converted_data = '\x02hello\x1cthisisthedata'
基本上我想摆脱b而只是吐出来的东西。
我尝试过各种struct.unpack方法以及.decode(“编码”)。我无法让前者完全工作,如果没有可视化的编码方式,后者会去掉十六进制值如果它可以将它转换为字符。任何想法?
更新
我能够使用以下代码获得我想要的结果:
inc_tcp_data = b'\x02hello\x3Fthisisthedata'.decode("ascii")
d = repr(inc_tcp_data)
print(d)
print(len(d))
print(len(inc_tcp_data))
输出是:
'\x02hello?thisisthedata'
25
20
然而,这仍然没有帮助我,因为我确实需要后面的正则表达式将\ x02视为十六进制值而不是一个4字节字符串。
我做错了什么?更新
我通过不解决它来解决这个问题。我希望十六进制字符保持不变的原因是正则表达式能够在路上进一步检测它。然而,我应该做的(并且做了)只是改变正则表达式来分析字节而不解码它。一旦我通过正则表达式分离出所有部分,我用.decode("ascii")
解码了部分,一切都很顺利。
如果它碰巧帮助了其他人,我只是更新它。
答案 0 :(得分:2)
假设您正在使用python 3
>>> inc_tcp_data.decode('ascii')
'\x02hello\x1cthisisthedata'