【发布时间】:2019-12-13 17:05:27
【问题描述】:
我有一个包含十六进制和 ASCII 字符的长字符串,需要将字符串转换为单个十进制(整数)值的列表。
所有十六进制字符都包含在方括号中,我已经弄清楚如何提取这些字符并将它们转换为整数。如下代码所示:
# String from log file
log7 = ',[[0x8][0x1c][0x12][0x6][0xc][0x13][0xa6][0x1]a[0xc][0x9c][0x1][0xf4][0x0][0xa4][0x1][0xf7][0x1][0xa8][0x0],[0x4][0xfe][0x0][0x7][0x0][0x7][0x2][0xf0][0x7]L[0x2]u[0x0][0xa5][0x0][0xe3][0x0][0xb9][0x0]@[0x4][0xb][0x1][0x4][0x0][0x6][0x2][0x14][0x8]m[0x2]v[0x0][0xb3][0x0][0xbb][0x0][0xc5][0x0][0xa2][0xff][0x12][0x1][0x6][0x0]'
# Extract all text in square brackets and put into a list
extract = re.findall(r"\[([A-Za-z0-9_]+)\]", log7)
# Convert all hexidecimal values in list to decimal
convert = [int(x, 16) for x in extract]
# [8, 28, 18, 6, 12, 19, 166, 1, 12, 156, 1, 244, 0, 164, 1, 247, 1, 168, 0, 4, 254, 0, 7, 0, 7, 2, 240, 7, 2, 0, 165, 0, 227, 0, 185, 0, 4, 11, 1, 4, 0, 6, 2, 20, 8, 2, 0, 179, 0, 187, 0, 197, 0, 162, 255, 18, 1, 6, 0]
但是,上面的代码不包含 ASCII 字符,而我真正需要做的是按照它们在字符串中出现的顺序将十六进制和 ASCII 的混合转换为十进制。
我知道我可以使用以下方法将单个 ASCII 码转换为十进制:
converted_ascii = [ord(x) for x in ascii_list]
我需要的结果是,粗体是缺少的 ASCII 字符 - 来自上面的第一批代码:
44、91、8、28、18、6、12、19、166、1、97、12、156、 1, 244, 0, 164, 1, 247, 1, 168, 0, 44, 4, 254, 0, 7, 0, 7, 2, 240, 7, 76, 2, 117, 0, 165, 0, 227, 0, 185, 0, 64, 4, 11, 1, 4, 0, 6, 2, 20, 8, 109, 2, 118, 0, 179, 0, 187, 0, 197, 0, 162, 255, 18, 1, 6, 0
请问,有人可以就如何完成下一步提供一些建议吗?
【问题讨论】:
-
r"(\[[A-Za-z0-9_]+\]|\w)"拆分它怎么样?以及如何使用循环 - 如果你得到带有[ ]的字符串,那么你有需要int()的十六进制,否则它是需要ord()的 char -
\w不捕获,或[,前两个 ascii 字符