Как передать последовательные данные с одним шестнадцатеричным значением в PuTTY с использованием кода Alt?

31147
Josh

Я пытаюсь отправить определенное шестнадцатеричное значение через последовательный COM-порт, используя PuTTY. В частности, я хочу отправить шестнадцатеричные коды 9C, B6, FC и 8B. Я посмотрел Altкоды для них, и они 156, 182, 252 и 139 соответственно.

Однако всякий раз, когда я ввожу Altкоды, перед 9C, B6 и 8B передается предыдущее шестнадцатеричное значение C2, поэтому отправляются следующие значения: C2 9C, ​​C2 B6 и C2 8B. Значение для FC изменено на C3 FC.

Почему эти значения помещаются перед шестнадцатеричным значением и почему FC изменяется полностью? Мне кажется, что существует проблема с внутренним преобразованием Altкода в шестнадцатеричный код. Есть ли способ прямого ввода шестнадцатеричных значений без использования Altкодов в PuTTY?

1
Если вы знаете, что предыдущее шестнадцатеричное значение всегда отправляется, измените свой код, чтобы учесть это. Кроме того, то, что вы отправляете, - это не код «alt», а просто целочисленное представление этих значений. Использование правильного термина жизненно важно. Ramhound 9 лет назад 0

1 ответ на вопрос

4
grawity

То, что вы видите, - это обычное преобразование текстового набора символов.

Что касается PuTTY, вы печатаете (и читаете) текст, а не необработанные двоичные данные, поэтому он должен преобразовывать текст в байты в любом настроенном наборе символов перед его отправкой по проводам.

Другими словами, когда вы вводите Alt+ 1 8 2, PuTTY получает соответствующий символ из устаревшей кодировки «OEM», для которой настроена система. (Нажатие Alt+ 0 1 8 2выберет из унаследованного набора символов «ANSI» (Windows-125x).) В этом случае символом является « пилообразный».

Теперь PuTTY должен преобразовать этот символ в байты. В более ранних версиях PuTTY по умолчанию использовался тот же устаревший набор символов Windows-125x, который используется самой ОС, например, Windows-1257, поэтому раньше преобразование было почти прямым - ввод 1 8 2, получал байт 182 (десятичное число 0xB6).

Однако, поскольку PuTTY обычно подключается к серверам Linux или BSD, подавляющее большинство из которых перешли на UTF-8 по умолчанию, последний выпуск PuTTY также начал использовать UTF-8 по умолчанию. UTF-8 является кодировкой мегасимволного набора Unicode, который находится в позиции U + 00B6, и в основном это просто совпадение того, что UTF-8 кодирует это значение в байтах C2 B6:

  • U+00B60000|0000 10|110110[110]00010 [10]110110C2 B6

  • U+00FC0000|0000 11|111100[110]00011 [10]111100C3 BC

  • U+20AC0010|0000 10|101100[1110]0010 [10]000010 [10]101100E2 82 AC

  • В Википедии есть это с цветами

В качестве другого примера, буква ėраньше была байтом E6в кодировке Windows-1257, но в Unicode это U + 0117, что соответствует байту C4 97в UTF-8. Эти последовательности имеют переменную длину, до 4 байтов для больших позиций.

Если вам абсолютно необходимо использовать PuTTY для отправки двоичных данных, откройте экран настроек «Окно → Перевод» и выберите в качестве «Удаленного набора символов» CP437, ISO-8859-1 или Windows-1252. (Сохраните это в отдельном сеансе; не сохраняйте это как глобальное значение по умолчанию, потому что это нарушит обычные соединения SSH.)