python - 字节/十六进制到人类可读值?

标签 python

我想使用 dpkt 学习数据包解码器处理.在网站上,我看到了以下示例代码:

>>> from dpkt.ip import IP
>>> from dpkt.icmp import ICMP
>>> ip = IP(src='\x01\x02\x03\x04', dst='\x05\x06\x07\x08', p=1)
>>> ip.v4
>>> ip.src
'\x01\x02\x03\x04'
>>> ip.data
''
>>> 
>>> icmp = ICMP(type=8, data=ICMP.Echo(id=123, seq=1, data='foobar'))
>>> icmp
ICMP(type=8, data=Echo(id=123, seq=1, data='foobar'))
>>> len(icmp)
14
>>> ip.data = icmp
>>> ip.len += len(ip.data)
>>> ip
IP(src='\x01\x02\x03\x04', dst='\x05\x06\x07\x08', len=34, p=1, data=ICMP(type=8, data=Echo(id=123, seq=1, data='foobar')))
>>> pkt = str(ip)
>>> pkt
'E\x00\x00"\x00\x00\x00\x00@\x01j\xc8\x01\x02\x03\x04\x05\x06\x07\x08\x08\x00\xc0?\x00{\x00\x01foobar'
>>> IP(pkt)
IP(src='\x01\x02\x03\x04', dst='\x05\x06\x07\x08', sum=27336, len=34, p=1, data=ICMP(sum=49215, type=8, data=Echo(id=123, seq=1, data='foobar')))

我对使用 hexa 的行感到困惑,例如:

ip = IP(src='\x01\x02\x03\x04', dst='\x05\x06\x07\x08', p=1)

“\x01\x02\x03\x04”和“\x05\x06\x07\x08”是什么意思?是否可以将这些字符串转换为更易于阅读的内容?

最佳答案

src='\x01\x02\x03\x04'中,src是字节序列,表示为字符串。它包含字节值 1234。这些对应于 ASCII 字符集中的不可打印字符,这就是 Python 使用十六进制转义序列显示它们的原因。

要获取整数值,您可以这样做:

>>> [ord(c) for c in src]
[1, 2, 3, 4]

虽然我不确定这是否是您真正要找的。请更清楚地定义您的问题。

关于python - 字节/十六进制到人类可读值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8909451/

相关文章:

python 通过给定列表生成 SQL 语句关键字

python - IPython 笔记本从原始文本单元格读取字符串

Python:如何按一列对行进行分组并按另一列选择一行?

python - 获取数据帧中每个特定行的操作结果

python - 密码验证器: password needs to contain EXACTLY one spacial character?

python - 昨天的午夜是什么时代?

python - odoo 12. 我无法对 Many2one 字段进行动态过滤

python - 增加移动平均线

python - 在Python中生成按总和排序的(i,j)序列

python - Pytorch 数据生成器,用于从许多 3D 立方体中提取 2D 图像