如何在Python中获取十六进制代码(\x)到十六进制地址(0x)的行?
如何将这行十六进制ASCII中的字节转换为如下所示的十六进制地址 我已经成功地将它们分隔到每一行,但是python 3 hex()有问题,因为当我尝试执行类似于say line.hex()的操作时,它会抛出诸如str type之类的错误 输入如何在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
\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不是我的第一语言。