如何将十六进制列表转换为 ASCII 值列表?

How to convert a hex list to a list of ASCII values?

让我们以十六进制字符串 0x790x760x7d0x7d0x80 为例。

ct=input()
hex_list=ct.split('0x')
print(hex_list)
ascii_values=[]
for i in hex_list:
    if i!="" :
       (ascii_values).append(ascii(i))
print(ascii_values)

我得到这个输出:

['', '79', '76', '7d', '7d', '80']
["'79'", "'76'", "'7d'", "'7d'", "'80'"]

但所需的输出将是转换为 ASCII 的十六进制值。

您可以将字符串视为一系列由四个字符组成的组。从每个组中,使用字符串切片和 zip() 删除 0x 前缀,然后您可以使用 map()zip() 中的元组转换为表示所需十六进制值的字符串。

从那里,您可以将这些字符串转换为所需的字符,使用 int() 获取字符串表示的整数值,并使用 chr() 获取相应的 ASCII 字符。

data = "0x790x760x7d0x7d0x80"
ascii_values = list(map(''.join, zip(data[2::4], data[3::4])))
result = [chr(int(val, 16)) for val in ascii_values]

print(result)

这输出:

['y', 'v', '}', '}', '\x80']

这会将字节列表转换为 ASCII,但 0x80 是无效的 ASCII 字符代码。见下文:

ct = '0x790x760x7d0x7d0x80'
hex_list = ct.split('0x')
ascii_values=[]
for i in hex_list:
    print(i)
    if i != '':
        try:
            bytes_object = bytes.fromhex(i)
            ascii_string = bytes_object.decode("ASCII")
            ascii_values.append(ascii(ascii_string))
        except UnicodeDecodeError:
            print('Invalid ASCII... skipping...')
print(ascii_values)

查看关于 0x80 的答案 here