CharArrayToStruct

uchar 유형 문자열을 POD 구조에 복사.

bool  CharArrayToStruct(
   void&         struct_object,    // 구조
   const uchar&  char_array[],     // 배열
   uint          start_pos=0       // 배열의 시작 위치
   );

매개변수

struct_object

[in]  모든 유형의 POD 구조 (단순 데이터 유형만 포함)에 대한 참조.

char_array[]

[in] uchar 유형 배열.

start_pos=0

[in]  배열의 포지션, 데이터 복사는 다음부터 시작됩니다.

값 반환

성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

 

예:

#define DATA_TOTAL 4
 
MqlRates ExtDataRates[DATA_TOTAL];
uchar    ExtCharArray[];
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 마지막 4개 바의 데이터를 uchar 배열에 복사합니다.
   ResetLastError();
   for(int i=0i<DATA_TOTALi++)
     {
      if(!CopyRatesToCharArray(iExtCharArray))
         return;
     }
 
//--- 사용 가능한 모든 데이터를 uchar 배열의 데이터 양만큼 루프의 MqlRates 구조 배열에 복사합니다.
   for(int i=0i<DATA_TOTALi++)
     {
      ResetLastError();
      if(!CharArrayToStruct(ExtDataRates[i], ExtCharArraysizeof(MqlRates)*i))
        {
         Print("CharArrayToStruct() failed. Error code: "GetLastError());
         return;
        }
      //--- uchar 배열에서 MqlRates 구조로 데이터를 성공적으로 복사한 때,
      //--- 구조에 복사된 데이터를 저널에 출력합니다.
      MqlRatesPrint(ExtDataRates[i]);
     }
 
   /*
   result:
   MqlRates data:
    Time = 2024.02.21 09:00;
    Open = 1.08116;
    High = 1.08141;
    Low = 1.08062;
    Close = 1.08124;
    Tick volume = 5344;
    Spread = 1;
    Real volume = 0
 
   MqlRates data:
    Time = 2024.02.21 08:00;
    Open = 1.08149;
    High = 1.08153;
    Low = 1.08073;
    Close = 1.08114;
    Tick volume = 3607;
    Spread = 2;
    Real volume = 0
 
   MqlRates data:
    Time = 2024.02.21 07:00;
    Open = 1.08143;
    High = 1.08165;
    Low = 1.08122;
    Close = 1.08150;
    Tick volume = 2083;
    Spread = 0;
    Real volume = 0
 
   MqlRates data:
    Time = 2024.02.21 06:00;
    Open = 1.08178;
    High = 1.08190;
    Low = 1.08132;
    Close = 1.08142;
    Tick volume = 1733;
    Spread = 0;
    Real volume = 0
   */
  }
//+------------------------------------------------------------------+
//| 바 데이터를 uchar 배열에 복사                                       |
//| MqlRates 구조를 통해 지정된 인덱스로                                 |
//+------------------------------------------------------------------+
bool CopyRatesToCharArray(const int indexuchar &data_array[])
  {
   MqlRates rates[1];
   uint     start=sizeof(MqlRates);
 
   ResetLastError();
   if(CopyRates(Symbol(), PERIOD_CURRENTindex1rates)!=1)
     {
      Print("CopyRates() failed. Error code: "GetLastError());
      return(false);
     }
   if(!StructToCharArray(rates[0], data_arraystart*index))
     {
      Print("StructToCharArray() failed. Error code: "GetLastError());
      return(false);
     }
 
   return(true);
  }
//+------------------------------------------------------------------+
//| 저널의 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"\n");
  }

추가 참조

StringToCharArray, ShortArrayToString, StructToCharArray, 코드페이지의 사용, FileReadStruct, Unions (union), MathSwap