在python中,如何将一个不同长度的数字列表转换为一个相同的ascii字符列表?

bvuwiixz  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(114)

我有一串号码:

a = [2, 2, 30, 1, 30, 6, 3, 30, 0, 9, 4, 30, 1, 30, 1, 29]

我试图将列表从整数转换为相同数字的ascii字符,然后再将它们转换为十六进制。当有一些数字超过一位时,我在弄清楚如何转换整个列表时遇到了麻烦。
我试过:

a = [2, 2, 30, 1, 30, 6, 3, 30, 0, 9, 4, 30, 1, 30, 1, 29]
b = f'0x{ord(str(a)):x}'  
c = int(b, base=16)

会抛出错误:第一个月
它的变体:

a = [2, 2, 30, 1, 30, 6, 3, 30, 0, 9, 4, 30, 1, 30, 1, 29]
separated_digits = [int(digit) for number in a for digit in str(number)]
ascii_chars_hexed = [f'0x{ord(str(digit)):x}' for digit in separated_digits]

如果我将中的数字拆分为单个数字,则可以使用,但我需要双位数字的字符输出基于2位数字,而不是每个数字单独输出。
我希望它输出:

[0x32, 0x32, 0x1e, 0x31, 0x1e, 0x36, 0x33, 0x1e, 0x30, 0x39, 0x34, 0x1e, 0x31, 0x1e, 0x31, 0x1d]`

有什么想法吗?

but5z9lq

but5z9lq1#

这是一种奇怪的数据格式,但下面的代码可以满足您的需要。将一位数转换为字符串并获取它们的ASCII值。例如,将字符串中"2"的ASCII值存储为整数50会更有意义。

a = [2, 2, 30, 1, 30, 6, 3, 30, 0, 9, 4, 30, 1, 30, 1, 29]
print([f'{ord(str(n)) if n < 10 else n:#x}' for n in a])

输出:

['0x32', '0x32', '0x1e', '0x31', '0x1e', '0x36', '0x33', '0x1e', '0x30', '0x39', '0x34', '0x1e', '0x31', '0x1e', '0x31', '0x1d']

相关问题