整数列表到字符串(字节数组) - python

时间:2010-08-12 17:32:54

标签: python

我有一个整数ascii值列表,我需要将其转换为字符串(二进制)以用作加密操作的密钥。 (我在python中重新实现java加密代码)

这有效(假设一个8字节的密钥):

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

但是,我更希望没有密钥长度和unpack()参数列表硬编码。

在给定初始的整数列表的情况下,如何正确实现这一点?

谢谢!

7 个答案:

答案 0 :(得分:55)

对于Python 2.6及更高版本,如果处理字节,那么bytearray是最明显的选择:

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

对我而言,这比Alex Martelli的答案更直接 - 仍然没有字符串操作或len电话,但现在你甚至不需要输入任何内容!

答案 1 :(得分:45)

对于这类任务(涉及同类值序列的任务),我更喜欢array模块到struct模块:

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

没有len调用,不需要字符串操作等 - 快速,简单,直接,为什么更喜欢任何其他方法?!

答案 2 :(得分:31)

这是一个旧问题,但在Python 3中,你可以直接使用bytes

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

答案 3 :(得分:11)

struct.pack('B' * len(integers), *integers)

*sequence表示“解包序列” - 或者更确切地说,“在致电f(..., *args ,...)时,请args = sequence”。

答案 4 :(得分:7)

key = "".join( chr( val ) for val in myList )

答案 5 :(得分:1)

以前使用map()函数的较短版本(适用于python 2.7):

"".join(map(chr, myList))

答案 6 :(得分:0)

另一种方法(Python 2.7 +):

"".join(str(x) for x in int_array)