Различные результаты при возврате нескольких значений в python (вызовы Cryptopal)

Проверьте, что ваш .project содержит javanature следующим образом:

<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>

Если он отсутствует, добавьте его ...

Очень поздно, но я надеюсь, что кто-то это будет полезно.

2
задан Alex_M1612 18 January 2019 в 11:42
поделиться

1 ответ

Функция print является виновником - она ​​переводит символы \x00 и \x07 в значения ASCII при выполнении. В частности, это происходит только при передаче строки в функцию print, а не итерируемый или другой объект (например, ваш tuple).

Это пример:

>>> s = 'This\x00string\x00is\x00an\x00\x07Example.'

>>> s
'This\x00string\x00is\x00an\x00\x07Example.'

>>> print(s)
This string is an Example.

Если вы добавите строку s к итерируемому (tuple, set или list), s не будет быть отформатирован с помощью функции print:

>>> s_list = [s]
>>> print(s_list)  # List
['This\x00string\x00is\x00an\x00\x07Example.']

>>> print(set(s_list))  # Set
{'This\x00string\x00is\x00an\x00\x07Example.'}

>>> print(tuple(s_list))  # Tuple
('This\x00string\x00is\x00an\x00\x07Example.')

Редактировать

Поскольку байты \x00 и \x07 являются управляющими символами ASCII (\x00 - это NUL и \x07). будучи БЕЛ), вы не можете представлять их по-другому. Таким образом, единственный способ, которым вы можете вырезать эти символы из строки без печати, - это использовать метод .replace(); но учитывая, что \x00 байты обрабатываются терминалом как пробелы, вы должны использовать s.replace('\x00', ' '), чтобы получить тот же вывод, который теперь изменил истинное содержимое строки.

В противном случае при построении строки; Вы могли бы попытаться реализовать некоторую логику для проверки управляющих символов ASCII и либо не добавлять их в tempMess, ни добавлять другой символ, например пробел или подобный.

Ссылки

ASCII Wiki: https://en.wikipedia.org/wiki/ASCII

Модуль Curses: https: // docs. python.org/3.7/library/curses.ascii.html?highlight=ascii#module-curses.ascii (может быть полезно, если вы хотите реализовать какую-либо логику).

0
ответ дан Adam 18 January 2019 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: