Приложение Н. Таблицы ASCII-кодов символов для операционных систем DOS и Windows

 

Для обработки на компьютере вся нечисловая информация должна быть преобразована в числовую форму. Так, для компьютерной обработки текста каждая буква при вводе кодируется определенным числом, а при выводе на внешние устройства, такие как монитор или принтер, по кодам символов строятся соответствующие изображения букв. Соответствие между набором символом и кодирующими их числами называется кодировкой символов. Как правило, код символа хранится в одном байте, поэтому коды символов могут принимать значения от 0 до 255. Такие кодировки называются однобайтовыми. Основной символьный набор компьютера - это стандартная для IBM-совместимых машин однобайтовая кодировка ANSI, называемая также ASCII-кодом (читается "аски").

В двухбайтовой кодировке Unicode (Юникод), предлагаемой в настоящее время в качестве общемирового стандарта, символ кодируется двумя байтами, таким образом, коды символов могут принимать значения от 0 до 65535=216 различных символов. В этой кодировке имеются коды для всех букв алфавитов множества языков, математических, декоративных символов и т. д.

На рис. Н.1. представлены две основные русскоязычные кодировки, известные как DOS-866 и Windows-1251. С первой работает среда Паскаль и все программы русифицированных версий DOS, со второй - все приложения русифицированных версий Windows. Чтобы узнать код символа, достаточно к числу десятков из первого столбца приписать число единиц из первой строки. Так, код латинской буквы "Z" в обеих кодировках равен 90. Символы с кодами меньше 32 - непечатаемые, это такие символы, как перевод строки, возврат каретки, табуляция, поэтому они не вошли в таблицу. Код пробела равен 32. Обратите внимание, что первые половины кодовых таблиц (символы с кодами меньше 128) совпадают как в этих двух кодировках, так и во всех остальных.

 

Рис. Н.1. Кодировки символов в ОС Dos и Windows

 

Расширенные коды клавиатуры

Нажатие клавиши преобразуется в двухбайтовый код, называемый скан-ASCII-кодом. Этот код помещается в буфер клавиатуры, откуда ваша программа может считать его с помощью прерывания системы BIOS. Старший байт двухбайтового кода называется скан-кодом и является отображением фактически нажатой клавиши. Скан-код не отражает состояние клавиш Shift, Ctrl или Alt и не является уникальным. Помимо скан-кодов нажатия, существуют коды отпускания клавиш, отличающиеся на шестнадцатеричное значение 80 в сторону увеличения. Младший байт полного кода, называемый ASCII-кодом, также не является уникальным, но полная комбинация скан и ASCII-кода уникальна. Некоторые клавиши не имеют ASCII-кода и вместо него возвращается ноль. Такие двухбайтовые коды называются расширенными. При приеме кода нажатой клавиши через DOS последняя отделяет от общего значения скан-код. Кроме того, работающий в системе русификатор может дополнительно транслировать скан-коды буквенных клавиш в ASCII-коды русских букв.

Исходя из сказанного, при использовании стандартной функции readkey, работающей с ASCII-кодами клавиш, в общем случае является правильной следующая схема обработки на Паскале:

 

ch := readkey; {Чтение символа из первого байта ch}

if ch = #0 then begin

   {Если нет ASCII-кода, прочитать дополнительно расширенный код}

   ch := readkey;   {читаем второй байт}

   {Обработка расширенного кода}

                      end

else

   {Обработка ASCII-кода}

 

На Паскале десятичный код может быть записан в виде #N, где N -- число, например, #65 ('A' латинская). ASCII-коды основных печатных символов можно узнать из рис. Н.1, остальные нужные коды приводятся в таблицах ниже.

 

Таблица Н.1. ASCII-коды некоторых клавиш

Enter

13

Пробел

32

Esc

27

BackSpace

8

Tab

9

 

 

 

Таблица Н.2. Расширенные коды некоторых клавиш

Клавиша

Код

Код с Shift

Код с Ctrl

Код с Alt

F1

59

84

94

104

F2

60

85

95

105

F3

61

86

96

106

F4

62

87

97

107

F5

63

88

98

108

F6

64

89

99

109

F7

65

90

100

110

F8

66

91

101

111

F9

67

92

102

112

F10

68

93

103

113

Стрелка вверх

72

 

 

 

Стрелка вниз

80

 

 

 

Стрелка влево

75

 

 

 

Стрелка вправо

77

 

 

 

Insert

82

 

 

 

Delete

83

 

 

 

Home

71

 

119

 

End

79

 

117

 

Page Up

73

 

132

 

Page Down

81

 

118