У меня есть список целочисленных значений ASCII, которые мне нужно преобразовать в строку (двоичную), чтобы использовать ее в качестве ключа для криптографической операции . (Я повторно реализую криптографический код java в python)
Это работает (при условии 8-байтового ключа):
key = struct.pack('BBBBBBBB', 17, 24, 121, 1, 12, 222, 34, 76)
Однако я бы предпочел, чтобы длина ключа и список параметров unpack () не были жестко закодированы.
Как я могу правильно реализовать это, учитывая начальный список целых чисел?
Спасибо!
Я предпочитаю модуль array
модулю struct
для такого рода задач (те, которые включают последовательности однородных значений ):
>>> import array
>>> array.array('B', [17, 24, 121, 1, 12, 222, 34, 76]).tostring()
'\x11\x18y\x01\x0c\xde"L'
нет вызова len
, никаких манипуляций со строками и т. Д. - быстро, просто, прямо, зачем предпочесть какой-либо другой подход ?!
struct.pack('B' * len(integers), *integers)
* последовательность
означает «последовательность распаковки» - или, скорее, «при вызове f (..., * args, ... )
, пусть args = sequence
".