MetaTrader 5 / Bibliotheken
TypeToBytes - Bibliothek für den MetaTrader 5
980
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