MetaTrader 5 / Bibliotheken

TypeToBytes - Bibliothek für den MetaTrader 5

980
(40)

Diese Cross-Plattform-Bibliothek ermöglicht bequeme Durchführung byteweiser Operationen mit Strukturen und Standarddatentypen .

Features:

  • Byteweiser Vergleich (== und! =) der Strukturen und Standarddatentypen miteinander (in MQL fehlen Operatoren für den Vergleich von Strukturen standardmäßig).
  • Bestimmung der Byte-Verschiebung einer Struktur, die durch einen Namen abgelegt ist.
  • Lesen des Wertes eines beliebigen Standardtyps durch Byte-Verschiebung in den Quelldaten.
  • Schreiben von Strukturen und Standardtypen durch Byteverschiebung an den Quelldaten.
  • Umwandlung von Strukturen und Standarddatentypen in ein Bytearray.
Alles erwähnte findet Anwendung bei simplen Strukturen.

Ein Skript mit ausführlichen Kommentaren ist beigefügt, um die Möglichkeiten der Bibliothek zu demonstrieren

// MQL4&5-code #property strict #include <TypeToBytes.mqh> #define PRINT(A) ::Print(#A + " = " + (string)A); void OnStart( void ) {   MqlTick Tick;   ::SymbolInfoTick(::Symbol(), Tick);   MqlTick CloneTick = Tick; // Operation mit Strukturen   if (_R(Tick) == CloneTick)             // Nun können die Strukturen verglichen werden     ::Print("Equal"); // Ergebnis des benötigten Typs durch Verschiebung erhalten   PRINT(_R(Tick)[(datetime)0])           // Prüfe den 'datetime' Wert mit Null-Verschiebung im Objekt der MqlTick Struktur - Tick.time // Hole the Verschiebung of the structure field   const int Offset = _OFFSET(Tick, bid); // Verschiebung in Bytes des Bid-Feldes im MqlTick Objekt gefunden   PRINT(Tick.bid)                        // Wert von Tick.bid geprüft   _W(Tick, Offset, (double)1.23456);     // (double) Wert 1.098765 geschrieben der bei der Verschiebung gefunden wurde   PRINT(Tick.bid)                        // Sicherstellen, dass Tick.bid nun gleich 1.098765 ist   PRINT(_R(Tick)[(double)Offset])        // 'double' Wert der sich beim Verschiebungs-Offset befindet ausgegeben - es ist wieder ein Tick.bid   PRINT(_R(Tick).Bytes[8])               // Wert des Bytes mit der Verschiebung von 8 im Objekt der MqlTick Struktur geprüft   PRINT(_R(Tick)[(uchar)8])              // Das gleiche aber mit einer anderen Methode   PRINT(CloneTick.bid)                   // Wert von CloneTick.bid geprüft   _W(CloneTick, 0, Tick);                // Wert des Tick-Struktur-Objektes in CloneTick mit Null-Verschiebung geschrieben   PRINT(CloneTick.bid)                   // Sicherstellen, dass CloneTick.bid == Tick.bid // Operation mit den Standardtypen   color Color = C'241,248,255';   PRINT(_R(Color)[(uchar)1])             // Grün-Komponente der Farbe - 248   _W(Farbe, 2, (uchar)230);              // (uchar) Wert 230 mit der Verschiebung von 2 geschrieben.   PRINT(Color)                           // Sicherstellen, dass Farbe nun C'241,248,230' ist // Simulatene Operationen mit gemischten Typen   if (_R(Tick) != Farbe)                 // Es ist sogar möglich Strukturen mit Standardtypen zu vergleichen     ::Print("Not equal");   return; } 

 

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/16280