2017-01-25 6 views
0

Я пытаюсь реализовать алгоритм AES в python 3. При реализации этого я обнаружил ошибку в функции ord(). Я просто пытаюсь преобразовать код из python 2.3 на python 3. Как я могу исправить ошибку? Мой код заключается в следующем:ТипError: ord() ожидаемая строка длины 1, но int found

key = map(ord, key) 

Заранее спасибо

+0

Пожалуйста, добавьте ваш код и не только одну строку. –

+0

'ord' берет строку и возвращает' int'. 'ord ('a') -> 97' и' chr' является обратным 'chr (97) -> 'a''. Какой ты хочешь? –

ответ

0

Ваш ключевой переменной уже bytes объект (str в py2). В Py2 str представляет собой последовательность длиной 1 str, поэтому вам нужно ord для преобразования в последовательность int.

В Py3, bytes объектами являются последовательности int s от 0 до 255 включительно. В принципе, в Python 2 вам нужно было map(ord, key) для преобразования из str в последовательность (list) из int, в Python 3 вам вообще не нужно выполнять преобразование, если вам не нужно мутировать последовательность, и даже тогда вы можете просто сделайте bytearray(key), чтобы сделать изменчивую копию оригинала bytes.

Обратите внимание, что Py2.6 + имеет bytearray типа и он ведет себя так же, как это делает в PY3 (изменяемая последовательность int с), так что вы, вероятно, можете написать 2/3 переносимого код, используя только bytearray(key) везде (и он будет быстрее, чем map(ord, key) для загрузки).

+0

Спасибо .. действительно помогает –

 Смежные вопросы

  • Нет связанных вопросов^_^