在Python中将ASCII码列表转换为字符串(字节数组)

45 投票
6 回答
104796 浏览
提问于 2025-04-16 02:42

我有一串整数的ASCII值,我需要把它们转换成一个字符串(二进制),用作加密操作的密钥。(我正在把Java的加密代码重新实现成Python)

这样做是有效的(假设密钥长度是8字节):

key = struct.pack('BBBBBBBB', 17, 24, 121, 1, 12, 222, 34, 76)

不过,我希望不要把密钥长度和unpack()的参数列表写死在代码里。

那么,给定一个初始的整数列表,我该怎么正确实现这个呢?

谢谢!

6 个回答

48

这是在重新提一个老问题,不过在Python 3中,你可以直接使用 bytes 了:

>>> bytes([17, 24, 121, 1, 12, 222, 34, 76])
b'\x11\x18y\x01\x0c\xde"L'
58

对于Python 2.6及以后的版本,如果你在处理字节数据,使用bytearray是最简单明了的选择:

>>> str(bytearray([17, 24, 121, 1, 12, 222, 34, 76]))
'\x11\x18y\x01\x0c\xde"L'

对我来说,这比Alex Martelli的回答还要直接——依然不需要进行字符串操作或调用len,而且现在你甚至不需要导入任何东西!

51

我更喜欢使用array模块,而不是struct模块来处理这类任务(也就是处理一系列相同类型的值):

>>> import array
>>> array.array('B', [17, 24, 121, 1, 12, 222, 34, 76]).tostring()
'\x11\x18y\x01\x0c\xde"L'

不需要调用len,也不需要处理字符串等等——快速、简单、直接,为什么还要选择其他方法呢?

撰写回答