ASCII Контур желаемого диапазона - PullRequest
0 голосов
/ 22 февраля 2020

Я построил сканер QR-кода на Raspberry Pi. i sh чтобы смещение данных на желаемое значение ascii, установленное пользователем, чтобы данные были несколько скрыты. Единственное значение ascii i wi sh для представления - это печатаемые символы 32-126. Моя проблема - скажем, например, я бы sh набрал привет со смещением 1. Это будет представлено как 'ifmmp'. это не беспокоит, но если я sh представляю значения, которые ближе к значению 126 ascii, у меня возникают проблемы, когда я получаю расширенные символы ascii - не мое намерение.

надеюсь, что вы можете помочь

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

         # the barcode data is a bytes object so if we want to draw it
     # on our output image we need to convert it to a string first
     barcodeData = barcode.data.decode("ascii")


     #Change the decoded ascii string by a value of desired charcters
     barcodeData = "".join(chr(ord(c) - 5) for c in barcodeData)

1 Ответ

0 голосов
/ 22 февраля 2020

В основном вы пытаетесь реализовать версию шифра Цезаря, но работающую по всему диапазону печати ASCII вместо букв алфавита.

def encode_string(s, offset):
    return ''.join(chr(32+((ord(ch)-32)+offset)%95) for ch in s)

# Examples:

encode_string('~~ Hello, World! ~~', 1)
'  !Ifmmp-!Xpsme"!  '
encode_string('  !Ifmmp-!Xpsme"!  ', -1)
'~~ Hello, World! ~~'

Символ % называется символом оператор модуля. Он вычисляет остаток от одного числа при делении на другое. Вычитая 32 из исходного значения ASCII, вы получите число в диапазоне 0–94. Затем вы можете добавить или вычесть все, что вам нравится из этого, а затем вы можете использовать этот оператор модуля, чтобы ограничить результат другим числом в диапазоне 0–94. Добавьте 32 к результату, и вы получите свой закодированный результат обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...