Русский

Справочник MQL4 Основы языка Типы данных Целые типы Символьные константы

Символьные константы

Символы, как элемент строки, в 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);
  }

Обратная косая черта является управляющим символом для компилятора при разборе константных строк и символьных констант в исходном тексте программы. Некоторые символы, например, одинарные кавычки ('), двойные кавычки ("), обратная косая черта (\) и управляющие символы можно представлять комбинацией символов, начинающейся с обратной косой черты(\), в соответствии с приводимой ниже таблицей:

Название символа

Мнемокод или изображение

Запись в MQL4

Числовое значение

новая строка (перевод строки)

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()