Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кетков.doc
Скачиваний:
17
Добавлен:
27.09.2019
Размер:
2.22 Mб
Скачать

5.1. Символьные данные и их представление в памяти эвм

Одиночным символьным данным (константам и переменным) в оперативной памяти ЭВМ выделяется по одному байту, в которых хранятся соответствующие значения – числовые коды конкретных символов в соответствии с их кодировкой в той или иной странице.

Чтобы познакомиться с 866-й кодовой страницей предлагается выполнить следующую программу:

#include <stdio.h>

#include <conio.h>

void main()

{

int i,j;

gotoxy(37,1);

printf("ASCII");

for (i=32; i<=52; i++)

{ gotoxy(1,i-29);

for (j=i; j<=255; j+=21)

printf("%c %3d ",j,j);

}

getch();

}

Результат ее работы приведен на рис. 5.1.

Рис. 5.1. Состав отображаемых символов ASCII (code page 866)

Отображаемые символы в таблице ASCII начинаются с кода 32 (0x20), которому соответствует символ "пробел". Коды больших русских букв начинаются с кода 128 (0x80), однако буква 'Ё' расположена не на своем месте. Наблюдается разрыв в числовой последовательности кодов малых букв – после буквы 'п' расположена группа кодов псевдографики. С их помощью в текстовом режиме работы дисплея строятся одинарные и двойные контуры таблиц. Малая буква 'ё' также расположена не в алфавитном порядке. Все эти нюансы приходится учитывать при построении программы перекодировки русских текстов из кодовой страницы 1251 (т.е. из кодировки Windows) в кодировку MS-DOS. С такой операцией приходится сталкиваться при необходимости включения русских текстов в консольное приложение BCB.

Значения однобайтовых символьных констант заключаются в одинарные кавычки и могут быть заданы тремя способами. Первый распространяется на отображаемые символы таблицы ASCII (см. рис. 5.1) и заключается в том, что отображаемый символ заключается в одинарные кавычки:

'F', '%', '$', 'ы', '5', '+', '"', 'q', 'Я', ' '

Последняя константа в приведенном перечислении соответствует пробелу. Сам символ апострофа таким образом "закодировать" нельзя.

Второй способ заключается в записи шестнадцатеричного кода символа после знака "обратный слэш":

'\x27' (код символа "апостроф", 39)

'\x5C' (код символа \, 92)

Обратите внимание на то, что шестнадцатеричный код записывается без лидирующего нуля (в отличие от записи числовых шестнадцатеричных констант). Так можно записать любой управляющий код, расположенный в начале таблицы ASCII. Однако в языках C, C++ чаще используются Escape-последовательности, о которых речь шла при управлении выводом (см. табл. 4.6). Вот несколько примеров:

'\'' – символ "апостроф"

'\\' – символ "обратный слэш"

Третий способ заключается в записи восьмеричного кода символа после знака "обратный слэш":

'\47' (код символа "апостроф", 39)

'\134' (код символа \, 92)

Обратите внимание на то, что восьмеричный код записывается без лидирующего нуля (в отличие от записи числовых восьмеричных констант) и должен принадлежать диапазону [0, 377].

Символьные переменные объявляются с помощью спецификаторов char или unsigned char. Одновременно их можно проинициализировать тем или иным способом:

char ch1='Я',ch2='\x9F',ch3='\237',ch4= 0x9F,ch5=0237,ch6=159;

Числовой способ инициализации гарантирует правильность вывода как в DOS-приложении, так и в консольном приложении Windows. Символьной инициализацией в консольных приложениях Windows можно пользоваться без проблем только для символов из первой половины таблицы ASCII.