Символьные типы

Символьные типы предназначены для хранения отдельных символов (букв), из которых формируются строки (см. раздел Строки). MQL5 имеет 4 символьных типа: два размером 1 байт (char, uchar) и два размером 2 байта (short, ushort). Типы с приставкой 'u' являются беззнаковыми.

Символьные типы являются по сути целочисленными, так как хранят целочисленный код символа из соответствующей таблицы символов: в случае char это таблица ASCII-символов (коды от 0 до 127), в случае uchar — расширенная ASCII (коды от 0 до 255), а в случае short/ushort — таблица Unicode (до 65535 символов в беззнаковом варианте). Если вам интересно, ASCII расшифровывается как American Standard Code for Information Interchange.

Для строк MQL5 используются 2-байтовые символы ushort. 1-байтовые uchar обычно применяются для интеграции с внешними программами при передаче массивов произвольных данных, которые упаковываются и распаковываются в другие типы согласно прикладным протоколам (например, для подключения к криптовалютной бирже).

Константы символов записываются как буквы в обрамлении одинарных кавычек. Но также допустимо использовать рассмотренную выше (см. раздел Целые числа) целочисленную нотацию. При этом целое число должно быть в диапазоне значений для 1- или 2-байтового формата.

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

  • \n — новая строка
  • \r — возврат каретки
  • \t — табуляция
  • \\ — обратная наклонная черта
  • \" — двойная кавычка
  • \' — одинарная кавычка
  • \X или \x — префикс для последующего указания числового кода в шестнадцатеричном формате
  • \0 — префикс для последующего указания числового кода в восьмеричном формате

Основные способы использования констант символьных типов приведены в скрипте MQL5/Scripts/MQL5Book/p2/TypeChar.mq5.

void OnStart()
{
  char a1 = 'a';  // ok, a1 = 97, English letter 'a' code
  char a2 = 97;   // ok, a2 = 'a' as well
  char b = '£';   // warning: truncation of constant value, b = -93
  uchar c = '£';  // ok, c = 163, pound symbol code
  short d = '£';  // ok
  short z = '\0';    // ok, 0
  short t = '\t';    // ok, 9
  short s1 = '\x5c'; // ok, backslash code 92
  short s2 = '\\';   // ok, backslash as is, code 92 as well
  short s3 = '\0134';// ok, backslash code in octal form
}

Переменные a1 и a2 получают значение символа 'a' (английская буква), двумя разными способами.

В переменную b производится попытка записать символ '£', но его код 163 находится вне диапазона char (127) и потому он "преобразуется" в -93 со знаком (компилятор выдает предупреждение). Идущие следом переменные типов uchar (c) и short (d) нормально воспринимают данный код.

Остальные переменные инициализированы с помощью управляющих последовательностей.

Символы можно обрабатывать теми же операциями, что и целые числа (см. главу Выражения).