Перейти к содержанию

(MQL) 2.2 Преобразование данных. Приведение типа переменной

преобразование данных

В прошлой статье, посвящённой преобразованию данных, была рассмотрена целая группа функций. Среди них была шаблонная функция «Convert()». Данная функция выполняет приведение типов переменных. Но для этого ей необходимо передать два аргумента. Однако нам, в процессе разработки фреймворка, может понадобится преобразовать тип уже имеющейся переменной, содержащей некоторые данные.

Приведение типа переменной

Чтобы это сделать без потери данных, нам потребуется группа шаблонных функций. Все они прописываются в файле «Conversion.mqh»:

// Приведение типа переменной к строковому
template<typename T1> 
 string toString(T1 var1) 
   { 
    return (string)var1; 
   }

Данная функция, в качестве аргумента, принимает переменную любого типа (T1) и приводит её к строковому типу. Первая буква u в названии некоторых типов является сокращением слова «unsigned» (беззнаковый).

//+------------------------------------------------------------------    Приведение типа переменной к int. Целый тип int имеет размер 4 байта (32 бита).  Минимальное значение // -2 147 483 648, максимальное значение 2 147 483 647.
//+------------------------------------------------------------------
 
template<typename T1> 
 int toInt(T1 var1) 
   { 
    return (int)var1; 
   }  

//+------------------------------------------------------------------  Приведение типа переменной к беззнаковому типу uint.Беззнаковый целый тип uint занимает в памяти 4 байта и позволяет выражать целочисленные значения от 0 до 4 294 967 295. 
//+------------------------------------------------------------------

 template<typename T1> 
 uint toUInt(T1 var1) 
   { 
    return (uint)var1; 
   }    

//+------------------------------------------------------------------
Приведение типа переменной к long. Он имеет размер 8 байт (64 бита). Минимальное значение -9 223 372 036 854 775 808, максимальное значение 9 223 372 036 854 775 807.
//+------------------------------------------------------------------
 
template<typename T1> 
 long toLong(T1 var1) 
   { 
    return (long)var1; 
   }  


//+------------------------------------------------------------------
Приведение типа переменной к ulong. Он также занимает 8 байт и позволяет хранить значения от 0 до 18 446 744 073 709 551 615
//+------------------------------------------------------------------

 template<typename T1> 
 ulong toULong(T1 var1) 
   { 
    return (ulong)var1; 
   } 
  
//+------------------------------------------------------------------
Приведение типа переменной к double. Это вещественный тип (или тип с плавающей точкой). Он имеет размер 8 байт (64 бита). Минимальное значение 2.2250738585072014e-308, максимальное значение 1.7976931348623158e+308.
//+------------------------------------------------------------------

 template<typename T1> 
 double toDouble(T1 var1) 
   { 
    return (double)var1; 
   } 

//+------------------------------------------------------------------
Приведение типа переменной к float. Это тоже вещественный тип (или тип с плавающей точкой) имеет размер 4 байта (32 бита). Минимальное значение 1.175494351e-38, максимальное значение 3.402823466e+38.
//+------------------------------------------------------------------

 template<typename T1> 
 float toFloat(T1 var1) 
   { 
    return (float)var1; 
   }  
  
//+------------------------------------------------------------------
Приведение типа переменной к bool. Тип bool имеет размер 1 байт (8 бит). Предназначен для хранения логических значений true (истина) или false (ложь), числовое представление которых 1 или 0 соответственно.
//+------------------------------------------------------------------

 template<typename T1> 
 bool toBool(T1 var1) 
   { 
    return (bool)var1; 
   }   

//+------------------------------------------------------------------
Приведение типа переменной к datetime. Тип datetime предназначен для хранения даты и времени в виде количества секунд, прошедших с 01 января 1970 года. Занимает в памяти 8 байт (64 бита).
//+------------------------------------------------------------------

 template<typename T1> 
 datetime toDateTime(T1 var1) 
   { 
    return (datetime)var1; 
   }   

//+------------------------------------------------------------------
Приведение типа переменной к short. Целый тип short имеет размер 2 байта(16 бит) и, соответственно, позволяет выразить множество значений равное 2 в степени 16: 2^16=65 536. Так как тип short является знаковым и содержит как положительные, так и отрицательные значения, то диапазон значений находится между -32 768 и 32 767.
//+------------------------------------------------------------------

 template<typename T1> 
 short toShort(T1 var1) 
   { 
    return (short)var1; 
   }

//+------------------------------------------------------------------
Беззнаковым типом short является тип ushort, который также имеет размер 2 байта. Минимальное значение равно 0, максимальное значение 65 535.
//+------------------------------------------------------------------
 
template<typename T1> 
 ushort toUShort(T1 var1) 
   { 
    return (ushort)var1; 
   } 
 
//+------------------------------------------------------------------
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127.
//+------------------------------------------------------------------

 template<typename T1> 
 char toChar(T1 var1) 
   { 
    return (char)var1; 
   }
      
//+------------------------------------------------------------------
Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar предназначен только для положительных значений. Минимальное значение равно нулю, максимальное значение равно 255. 
//+------------------------------------------------------------------

 template<typename T1> 
 uchar toUChar(T1 var1) 
   { 
    return (uchar)var1; 
   }    

При приведении числовых типов необходимо помнить, что некоторые преобразования сопровождаются потерей части данных. Чтобы такого не случилось необходимо учитывать «старшинство» типов данных. В этом вам поможет схема, которая описана в официальном справочнике языка MQL5.

Опубликовано в рубрике2. ХелперыОснову для торговых роботов (MQL)