Символьные константы
Символы, как элемент строки, в MQL4 - это индексы в наборе символов Unicode. Они являются 16-разрядными значениями, которые можно преобразовывать в целые числа и с которыми можно манипулировать целочисленными операциями, такими как сложение и вычитание.
Любой одиночный символ, заключенный в одинарные кавычки, или шестнадцатеричный ASCII-код символа в виде '\x10' является символьной константой и имеет тип ushort. Например, запись вида '0' представляет из себя числовое значение 30, соответствующее индексу, по которому в таблице символов располагается символ ноль.
Пример:
void OnStart()
{
//--- определим символьные константы
int symbol_0='0';
int symbol_9=symbol_0+9; // получим символ '9'
//--- выведем значения констант
printf("В десятичном виде: symbol_0 = %d, symbol_9 = %d",symbol_0,symbol_9);
printf("В шестнадцетеричном виде: symbol_0 = 0x%x, symbol_9 = 0x%x",symbol_0,symbol_9);
//--- заведем константы в строку
string test="";
StringSetCharacter(test,0,symbol_0);
StringSetCharacter(test,1,symbol_9);
//--- а вот как они выглядят в строке
Print(test);
} |
Обратная косая черта является управляющим символом для компилятора при разборе константных строк и символьных констант в исходном тексте программы. Некоторые символы, например, одинарные кавычки ('), двойные кавычки ("), обратная косая черта (\) и управляющие символы можно представлять комбинацией символов, начинающейся с обратной косой черты(\), в соответствии с приводимой ниже таблицей:
|
|
|
|
новая строка (перевод строки)
|
LF
|
'\n'
|
10
|
горизонтальная табуляция
|
HT
|
'\t'
|
9
|
возврат каретки
|
CR
|
'\r'
|
13
|
обратная косая черта
|
\
|
'\\'
|
92
|
одинарная кавычка
|
'
|
'\''
|
39
|
двойная кавычка
|
"
|
'\"'
|
34
|
шестнадцатеричный код
|
hhhh
|
'\xhhhh'
|
от 1до 4 шестнадцатеричных знаков
|
десятичный код
|
d
|
'\d'
|
десятичное число от 0 до 65535
|
Если за обратной косой чертой следует символ, отличный от перечисленных, результат не определен.
Пример
void OnStart()
{
//--- объявим символьные константы
int a='A';
int b='$';
int c='©'; // код 0xA9
int d='\xAE'; // код символа ®
//--- выведем константы на печать
Print(a,b,c,d);
//--- добавим символ в строку
string test="";
StringSetCharacter(test,0,a);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,0,b);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,0,c);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,0,d);
Print(test);
//--- представим символы в виде числа
int a1=65;
int b1=36;
int c1=169;
int d1=174;
//--- добавим символ в строку
StringSetCharacter(test,1,a1);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,1,b1);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,1,c1);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,1,d1);
Print(test);
} |
Как уже говорилось выше, значение символьной константы (или переменной) представляет собой индекс в таблице символов, а так как индекс является целым числом, то допустимо его записывать разными способами.
void OnStart()
{
//---
int a=0xAE; // код символа ® соответствует литералу '\xAE'
int b=0x24; // код символа $ соответствует литералу '\x24'
int c=0xA9; // код символа © соответствует литералу '\xA9'
int d=0x263A; // код символа ☺ соответствует литералу '\x263A'
//--- выведем значения
Print(a,b,c,d);
//--- добавим символ в строку
string test="";
StringSetCharacter(test,0,a);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,0,b);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,0,c);
Print(test);
//--- заменим символ в строке
StringSetCharacter(test,0,d);
Print(test);
//--- коды мастей
int a1=0x2660;
int b1=0x2661;
int c1=0x2662;
int d1=0x2663;
//--- добавим символ пикей
StringSetCharacter(test,1,a1);
Print(test);
//--- добавим символ червей
StringSetCharacter(test,2,b1);
Print(test);
//--- добавим символ бубей
StringSetCharacter(test,3,c1);
Print(test);
//--- добавим символ треф
StringSetCharacter(test,4,d1);
Print(test);
//--- Пример символьных литералов в строке
test="Дама\x2660Туз\x2662";
printf("%s",test);
} |
Внутреннее представление символьного литерала - тип ushort. Символьные константы могут принимать значения от 0 до 65535.
Смотри также
StringSetCharacter(), StringGetCharacter(), ShortToString(), ShortArrayToString(), StringToShortArray()
|