StructToCharArray

Copie la structure POD dans un tableau d'éléments de type uchar.

bool  StructToCharArray(
   const void&  struct_object,     // structure
   uchar&       char_array[],      // tableau
   uint         start_pos=0        // position de départ dans le tableau
   );

Paramètres

struct_object

[in]  Référence sur n'importe quel type de structure POD  (ne contenant que des types de données simples).

char_array[]

[in]  tableau d'éléments de type uchar.

start_pos=0

[in]  Position dans le tableau à partir de laquelle les données copiées seront ajoutées.

Valeur de Retour

Retourne true en cas de succès, sinon false.

Note

Lors de la copie, le tableau dynamique est automatiquement étendu (ArrayResize) s'il n'y a pas assez d'espace. Si le tableau ne peut pas être étendu jusqu'à la valeur désirée, la fonction retourne une erreur.

 

Exemple :

uchar    ExtCharArray[];
MqlRates ExtRates[1];
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- copie les données de la barre actuelle dans la structure MqlRates
   if(CopyRates(Symbol(), PERIOD_CURRENT01ExtRates)!=1)
     {
      Print("CopyRates() failed. Error code: "GetLastError());
      return;
     }
 
//--- écrit les données reçues dans la structure MqlRates dans le journal
   Print("Data in the structure immediately after receiving it:");
   MqlRatesPrint(ExtRates[0]);
 
//--- copie la structure dans le tableau de type uchar
   ResetLastError();
   if(!StructToCharArray(ExtRates[0], ExtCharArray))
     {
      Print("StructToCharArray() failed. Error code: "GetLastError());
      return;
     }
 
//--- efface la structure
   ZeroMemory(ExtRates[0]);
//--- écrit les données dans la structure après effacement
   Print("\nData in the structure after ZeroMemory():");
   MqlRatesPrint(ExtRates[0]);
 
//--- copie maintenant les données du tableau uchar vers la structure MqlRates
   if(!CharArrayToStruct(ExtRates[0], ExtCharArray))
     {
      Print("CharArrayToStruct() failed. Error code: "GetLastError());
      return;
     }
//--- écrit les données dans la structure MqlRates après les avoir copiées depuis le tableau uchar
   Print("\nData in the MqlRates structure after copying it from a uchar array:");
   MqlRatesPrint(ExtRates[0]);
 
   /*
  résultat :
 
   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
   */
  }
//+------------------------------------------------------------------+
//| Ecrit les champs de la structure MqlRates dans le journal        |
//+------------------------------------------------------------------+
void MqlRatesPrint(MqlRates &rates)
  {
//--- crée la chaîne de sortie
   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);
//--- écrit l'en-tête et la chaîne de sortie dans le journal
   Print("MqlRates data:\n"text);
  }

Voir aussi

StringToCharArray, ShortArrayToString,CharArrayToStruct, Utilisation d'une Page de Code (codepage), FileWriteStruct, Unions (union), MathSwap