如何在Python中获取十六进制代码(\x)到十六进制地址(0x)的行?

如何在Python中获取十六进制代码(\x)到十六进制地址(0x)的行?,python,python-3.x,sorting,hex,Python,Python 3.x,Sorting,Hex,如何将这行十六进制ASCII中的字节转换为如下所示的十六进制地址 我已经成功地将它们分隔到每一行,但是python 3 hex()有问题,因为当我尝试执行类似于say line.hex()的操作时,它会抛出诸如str type之类的错误 输入 \xAA\xBB\xCC\xDD\xEE\xFF\x11\x22\x33\x44\x55\x66\x77\x88\x99\x00 输出 0xDDCCBBAA 0x2211FFEE 0x66554433 0x00998877 我的代码 import re

如何将这行十六进制ASCII中的字节转换为如下所示的十六进制地址

我已经成功地将它们分隔到每一行,但是python 3 hex()有问题,因为当我尝试执行类似于say line.hex()的操作时,它会抛出诸如str type之类的错误

输入
\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)
将输出:

0xaa
0xbb
0xcc
0xdd
0xee
0xff
0x11
0x22
0x33
0x44
0x55
0x66
0x77
0x88
0x99
0x0
这是你需要的吗?这假定输入字符串
s
是由Unicode字符组成的字符串。了解你真正想要实现的目标是非常有帮助的

将输出:

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"

# matches a word consisting of 4 bytes encoded as \xHH where H is any hex character
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
转换。

我总是在开始执行任何操作之前验证输入是否正确。因此,使用regexp,我得出以下结论:

import re

a=r"\xAA\xBB\xCC\xDD\xEE\xFF\x11\x22\x33\x44\x55\x66\x77\x88\x99\x00"

# matches a word consisting of 4 bytes encoded as \xHH where H is any hex character
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
转换。

我阅读了这个问题,要求对32位字进行静态大小的十六进制编码(根据输出)。当然,需要作者的一些反馈来证实这一点。我阅读了这个问题,要求对32位字进行静态大小的十六进制编码(根据输出)。当然,需要作者的一些反馈来确认这一点。对python代码的任何评论或编辑都是非常感谢的,python不是我的第一语言。对python代码的任何评论或编辑都是非常感谢的,python不是我的第一语言。