1

Я заново открыл управляющие символы ASCII, когда поиграл с некоторым кодом эмуляции терминала, и написал небольшую программу, которая выводит шестнадцатеричное значение каждой нажатой клавиши (tcsetattr () с ~ ICANON).

Хотя я понимаю, что одновременное нажатие клавиш «Control» и «D» (CTL-D) генерирует управляющий символ ASCII ^D/EOT/0x04 и множество других, как хорошо описано на странице WP ASCII , я был удивлен, увидев это (в ОС По крайней мере, X), некоторые другие неожиданные ключи также генерировали управляющие символы:

CTL-2/@ = NUL = ^@ = 0x00 (expected actually)
CTL-3/# = ESC = ^[ = 0x1B
CTL-4/$ = FS = ^\ = 0x1C
CTL-5/% = GS = ^] = 0x1D
CTL-6/^ = RS = ^^ = 0x1E (expected actually)
CTL-7/& = CTL-/ = US = ^_ = 0x1F
CTL-8/* = DEL = ^? = 0x7F

Обратите внимание, что CTL-1, -9 и -0 не генерируют управляющие символы, только обычные цифры.

За исключением этих двух ожидаемых символов (NUL и RS), почему терминалы генерируют управляющие символы для этого подмножества цифровых клавиш?

Редактировать: чтобы было понятно, я в курсе и понимаю, что CTL - [= Esc, и другие стандартные "каретки"/ управляющие клавиши (^\, ^], ^^, ^ _, ^?). Мне интересно, почему цифровые или ^ #, ^ $, ^%, ^ &, ^ * и клавиши управления ^ пересекаются с ними.

1 ответ1

0

Обозначение каретки, как ^ D, на самом деле не означает Ctrl-D. В этом случае это означает «управляющий символ ASCII с номером, совпадающим с алфавитным рангом буквы», D = 4, поэтому ^ D = 0x04. Некоторые люди решили, что было бы неплохо сопоставить эти обозначения карет с буквами клавиатуры схемы ctrl-X. Очевидно, что он ломается в 27, или 0x1B, где люди должны были быть творческими.

Насколько я понимаю, никогда не было никакого стандарта для отображения управляющего символа, превосходящего 0x1A, и что различные исторические реализации сосуществовали некоторое время.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .