如何将十六进制ASCII这行的字节获取到十六进制地址,如下所示?
我已经设法将它们分隔到每一行,但是python 3 hex()遇到问题,因为当我尝试执行诸如line.hex()之类的操作时,它会抛出诸如str类型之类的错误。
输入\xAA\xBB\xCC\xDD\xEE\xFF\x11\x22\x33\x44\x55\x66\x77\x88\x99\x00
输出
0xDDCCBBAA
0x2211FFEE
0x66554433
0x00998877
我的代码
import re
a=r"\xAA\xBB\xCC\xDD\xEE\xFF\x11\x22\x33\x44\x55\x66\x77\x88\x99\x00"
r = '\n'.join(re.findall('................|.$', a))
for line in r.splitlines():
print(line)
s = "\xAA\xBB\xCC\xDD\xEE\xFF\x11\x22\x33\x44\x55\x66\x77\x88\x99\x00"
print("\n".join([hex(ord(c)) for c in s]))
将输出:
0xaa
0xbb
0xcc
0xdd
0xee
0xff
0x11
0x22
0x33
0x44
0x55
0x66
0x77
0x88
0x99
0x0
这是您需要的吗?假定输入字符串s
是由Unicode字符组成的字符串。了解您实际想要实现的目标将非常有帮助。
在开始执行任何操作之前,我始终会验证输入是否正确。因此,使用regexp,我想到了以下内容:
import re
a=r"\xAA\xBB\xCC\xDD\xEE\xFF\x11\x22\x33\x44\x55\x66\x77\x88\x99\x00"
listOfFourHexBytes = re.findall(r'(?:\\x[0-9a-fA-F]{2}){4}', a)
if (len(a) != 4 * 16 or len(listOfFourHexBytes) != 4):
raise Exception("Input does not consist of 16 hexadecimal bytes")
for fourHexbytes in listOfFourHexBytes:
justFourHexBytes = re.sub(r'\\x', '', fourHexbytes)
print("0x" + justFourHexBytes)
# not asked for, but generate number from hex value first
n = int(justFourHexBytes, 16)
print("0x%08X" % n)
首先以4进制编码字节为一组,以您要求的格式查找实际的十六进制字节。然后,它检查其中是否确实有4个,并确保输入字符串的大小正确(没有虚假的跳过字符)。然后遍历这些字符串,从字符串中删除\x
。下一步当然很容易,只要在结果中添加0x
并打印出来即可。
通常,您需要对值进行某些处理,因此我免费添加了int
转换。