在Python中将ASCII码列表转换为字符串(字节数组)
我有一串整数的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
,也不需要处理字符串等等——快速、简单、直接,为什么还要选择其他方法呢?