Тип данных CHAR имеет свои особенности. Дело в том, что для представления букв цифрами в памяти компьютера используются разнообразные кодовые таблицы. Можно кодировать букву "А" единицей, а можно – числом 64. Особенно большую путаницу вызывают русские буквы.
История вопроса такова. В 70-е гг. ХХ века для русских букв в основном применялась российская кодировка КОИ8 (код отображения информации). С появлением персональных компьютеров была разработана кодировка cp866, применяющаяся в операционной системе MS DOS. Эта кодировка была узаконена государственным стандартом. С появлением Windows 3.1 фирма Microsoft ввела новую кодировку Win1251, что вызывало достаточно странную проблему перевода файлов с русского языка на русский. Одновременно в операционных системах Unix/Lunix и в части российского Интернета почему-то стали применять КОИ8, что привело к еще большей путанице. В середине 90-х годов кодировка КОИ8 была узаконена постановлением правительства РФ, что вызывает, по меньшей мере, удивление – на большинстве персональных компьютеров ее использование не предусмотрено. С выходом Window95, учитывая многочисленные жалобы зарубежных пользователей, Microsoft ввел "окончательную" кодировку Unicode. В ней каждая буква кодируется не одним, а двумя байтами, что дает 65556 комбинаций. В Unicode уместились все символы всех алфавитов Земли, включая китайский, арабский, японский языки. Используя эту кодировку, можно набрать текст вида بةثحطعف. Увы, надежды на то, что с переходом на Unicode с путаницей будет покончено, не оправдались. Половина Интернета по-прежнему использует КОИ8, а Microsoft поленился добавить русские буквы в большую часть шрифтов.
С типом CHAR работают следующие процедуры и функции:
ORD(c) – возвращает код символа c;
CHR(n) – возвращает символ с кодом n.
Тип CHAR упорядочен по алфавиту: ‘A’<‘B’<‘C’…<‘Z’ Это позволяет сравнивать буквы для их алфавитной сортировки. Наконец, тип CHAR эквивалентен типу BYTE – оба они занимают один и тот же объем памяти. Для эквивалентных типов можно применять операцию типизации, заключающуюся в преобразовании типа в нужный. Например, чтобы напечатать символ с кодом n, необязательно делать так:
Label1.Caption:=CHR(n);
Есть другой способ:
Label1.Caption:=CHAR(n);
Здесь CHAR() – операция типизации. Возможна и обратная процедура для получения кода символа:
Label1.Caption:=IntToStr((BYTE(c)))