如何正确十六进制化含转义字符的捕获数据包字节数据?
字节数据的Hexlify处理差异解析
首先得明确你要处理的对象到底是什么,不同的处理目标对应完全不同的结果:
1. 处理捕获到的原始二进制字节(数据包分析的正确场景)
你从数据包里抓到的b'\x18\x05'本质是两个二进制字节:0x18(十进制24)和0x05(十进制5)。
用Python的hexlify或者bytes.hex()处理是完全正确的:
import binascii raw_data = b'\x18\x05' # 两种方式都能得到原始字节的十六进制表示 print(binascii.hexlify(raw_data)) # 输出 b'1805' print(raw_data.hex()) # 输出 '1805'
这个结果直接对应你捕获到的真实二进制数据,是数据包分析场景下需要的正确结果。
2. 处理Python字节字面量的字符串形式
在线编码器得到的62275c7831385c78303527,本质是把Python代码里的字节字面量字符串(也就是"b'\\x18\\x05'"这个字符串,包含b、单引号、反斜杠、x、数字这些字符)转成十六进制。每个字符对应的ASCII码十六进制如下:
b→ 62,'→ 27,\→ 5c,x→78,1→31,8→38,0→30,5→35
拼起来就是在线编码器的结果。
如果要在Python里复现这个结果,代码是:
literal_str = "b'\\x18\\x05'" print(literal_str.encode().hex()) # 输出 '62275c7831385c78303527'
3. 你手动得到的783138783035
这个是把"\x18\x05"(去掉b和单引号的字面量字符串)里的每个字符转成十六进制:x→78,1→31,8→38,x→78,0→30,5→35,拼起来就是这个结果,本质也是处理字符串,不是真实的数据包字节。
总结:如果是分析数据包的二进制内容,用hexlify或者bytes.hex()得到的1805才是正确的;其他结果都是在处理"表示字节的字符串",不是真实的数据包字节。
内容的提问来源于stack exchange,提问作者admfotad
相关产品推荐
相关产品推荐

