StructToCharArray

POD结构复制到uchar类型数组。

bool  StructToCharArray(
   const void&  struct_object,     //结构
   uchar&       char_array[],      // 数组
   uint         start_pos=0        // 数组中的起始位置
   );

参数

struct_object

[in]  参考任何类型的POD结构(只包含简单的数据类型)。

char_array[]

[in] uchar类型数组。

start_pos=0

[in]  数组中的位置,从这里开始添加复制的数据。

返回值

如果成功返回true,否则返回false。

注意

当复制时,如果没有足够的空间,动态数组将自动展开(ArrayResize)。如果数组不能展开到所需的值,该函数将返回一个错误。

 

示例:

uchar    ExtCharArray[];
MqlRates ExtRates[1];
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 将当前柱形图的数据复制到MqlRates结构
   if(CopyRates(Symbol(), PERIOD_CURRENT01ExtRates)!=1)
     {
      Print("CopyRates() failed. Error code: "GetLastError());
      return;
     }
 
//--- 在日志中记录MqlRates结构中接收的数据
   Print("Data in the structure immediately after receiving it:");
   MqlRatesPrint(ExtRates[0]);
 
//--- 将该结构复制到uchar类型数组中
   ResetLastError();
   if(!StructToCharArray(ExtRates[0], ExtCharArray))
     {
      Print("StructToCharArray() failed. Error code: "GetLastError());
      return;
     }
 
//--- 清空结构
   ZeroMemory(ExtRates[0]);
//--- 清空后在结构中记录数据
   Print("\nData in the structure after ZeroMemory():");
   MqlRatesPrint(ExtRates[0]);
 
//--- 现在将数据从uchar数组复制到MqlRates结构
   if(!CharArrayToStruct(ExtRates[0], ExtCharArray))
     {
      Print("CharArrayToStruct() failed. Error code: "GetLastError());
      return;
     }
//--- 将数据从uchar数组复制后记录到MqlRates结构中
   Print("\nData in the MqlRates structure after copying it from a uchar array:");
   MqlRatesPrint(ExtRates[0]);
 
   /*
   result:
 
   Data in the structure immediately after receiving it:
   MqlRates data:
    Time = 2024.02.21 07:00;
    Open = 1.08143;
    High = 1.08158;
    Low = 1.08122;
    Close = 1.08137;
    Tick volume = 1341;
    Spread = 4;
    Real volume = 0
 
   Data in the structure after ZeroMemory():
   MqlRates data:
    Time = 0;
    Open = 0.00000;
    High = 0.00000;
    Low = 0.00000;
    Close = 0.00000;
    Tick volume = 0;
    Spread = 0;
    Real volume = 0
 
   Data in the MqlRates structure after copying it from a uchar array:
   MqlRates data:
    Time = 2024.02.21 07:00;
    Open = 1.08143;
    High = 1.08158;
    Low = 1.08122;
    Close = 1.08137;
    Tick volume = 1341;
    Spread = 4;
    Real volume = 0
   */
  }
//+------------------------------------------------------------------+
//| 在日志中记录MqlRates结构的字段                                      |
//+------------------------------------------------------------------+
void MqlRatesPrint(MqlRates &rates)
  {
//--- 创建输出字符串
   string text=StringFormat(" Time = %s;\n"
                            " Open = %.*f;\n"
                            " High = %.*f;\n"
                            " Low = %.*f;\n"
                            " Close = %.*f;\n"
                            " Tick volume = %I64u;\n"
                            " Spread = %d;\n"
                            " Real volume = %I64u",
                            TimeToString(rates.time),
                            _Digitsrates.open,
                            _Digitsrates.high,
                            _Digitsrates.low,
                            _Digitsrates.close,
                            rates.tick_volume,
                            rates.spread,
                            rates.real_volume);
//--- 在日志中记录标题和输出字符串
   Print("MqlRates data:\n"text);
  }

另见

StringToCharArray ShortArrayToStringCharArrayToStruct使用代码页FileWriteStructUnions (union)MathSwap