Я заново открыл управляющие символы 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, и другие стандартные "каретки"/ управляющие клавиши (^\, ^], ^^, ^ _, ^?). Мне интересно, почему цифровые или ^ #, ^ $, ^%, ^ &, ^ * и клавиши управления ^ пересекаются с ними.