Fehler, Irrtümer, Fragen - Seite 2690

 

Hallo.

Worin könnte der Fehler liegen? Ich platziere zwei Kopien desselben Indikators auf dem Diagramm, ich ändere die Farbe der Linien im ersten Indikator, die Farbe der Linien ändert sich auch im zweiten, aber ich ändere nichts im zweiten. Es gibt keine globalen Variablen.

 
Nikolai Semko:

Ich kann darin keine Logik erkennen.
Bei einfachen Typen können Sie dies zunächst tun:

Zweitens ist es so:

und es sind nicht nur Krücken.

Ergebnis in beiden Fällen:

17*256+92=4444

Die Logik ist, dass, wenn Sie Daten in ein Array für Strukturen innerhalb einer Funktion schreiben können, sollte es das gleiche für einfache Typen sein.

Okay, die Situation ist ganz einfach.

 
Aliaksandr Hryshyn:

Die Logik ist, dass, wenn Daten in ein Array für Strukturen innerhalb einer Funktion geschrieben werden können, sollte es das gleiche für einfache Typen sein.

Ich würde diese Logik gerne mit etwas anderem als Ihrer Meinung bestätigen.

Google "C# struct to byte array", wenn Sie interessiert sind.

Beachten Sie, dass C# ist ein Geistesprodukt von Microsoft für alle Nicht-Programmierer, und was in MQL ist in ein paar Zeilen getan, in C#, in der Tat einfach nicht zur Verfügung gestellt - in gegoogelt Beispiele alles über Marshal getan wird, und dies ist die Arbeit mit unmanaged Code, das heißt, es ist außerhalb von .Net - in MQL Begriffe - "Dies ist ein .dll Aufruf".


so ist es logisch...

 
Igor Makanu:

Ich würde diese Logik gerne mit etwas anderem als Ihrer Meinung bestätigen.

Google "C# struct to byte array", wenn Sie interessiert sind.

Beachten Sie, dass C# ist ein Geistesprodukt von Microsoft für alle Nicht-Programmierer, und was in MQL ist in ein paar Zeilen getan, in C #, in der Tat einfach nicht zur Verfügung gestellt - in gegoogelt Beispiele alles über Marshal getan wird, und dies ist die Arbeit mit unmanaged Code, das heißt, es ist außerhalb von .Net - in MQL Begriffe - "es ist ein Aufruf eines .dll".


So ist es logisch...

Davon gibt es hier eine Menge:

BinaryWriter.Write Method

Viele überladene Methoden:

Write(UInt64)   
Write(UInt32)   
Write(UInt16)
.....
 
Aliaksandr Hryshyn:

So etwas gibt es:

Viele überladene Methoden:

https://metanit.com/sharp/tutorial/5.6.php

Dies ist analog zur Arbeit mit Dateien in MQL mit dem Flag FILE_BIN

Wenn ich mich nicht irre, wollten Sie nicht mit Dateien arbeiten, sondern nur einen einfachen Datentyp in ein Byte-Array serialisieren

 
Igor Makanu:

https://metanit.com/sharp/tutorial/5.6.php

Dies ist analog zur Arbeit mit Dateien in MQL mit dem Flag FILE_BIN

Wenn ich mich nicht irre, wollen Sie einen einfachen Datentyp in ein Byte-Array serialisieren

FileStream

MemoryStream

Sowohl Dateien als auch Speicher.

Warum haben Sie eine solche Abneigung gegen C# :)?
 
Aliaksandr Hryshyn:

FileStream

MemoryStream

Sowohl Dateien als auch Speicher.

Warum haben Sie eine solche Abneigung gegen C# :)?

Zu der von Ihnen erfundenen Feindseligkeit habe ich nur geschrieben, dass die Sprache für Nicht-Programmierer gedacht ist, was einer sehr benutzerfreundlichen Sprache entspricht, um genau zu sein

über Dateiströme, haben Sie eine einfache Aufgabe ziemlich kompliziert gemacht

Die Essenz meiner Frage an Sie ist, dass MQL ist eine sehr fortschrittliche Sprache in Bezug auf die "Rohdaten" Verarbeitung, ein weiteres Beispiel - MQL hat keine Standard-Struktur Ausrichtung, es ist bequem für die Nutzer

 
Igor Makanu:

Ich habe gerade geschrieben, dass die Sprache für Nicht-Programmierer ist, was einer sehr benutzerfreundlichen, um genau zu sein

über Dateiströme, haben Sie eine einfache Aufgabe ziemlich kompliziert gemacht

Die Essenz meiner Frage an Sie ist, dass MQL ist eine sehr fortschrittliche Sprache in Bezug auf die "Rohdaten" Handhabung, ein weiteres Beispiel - MQL hat keine Standard-Struktur Ausrichtung, es ist bequem für die Benutzer

Es gibt ein Analogon eines Dateistroms nur im RAM.
 
Aliaksandr Hryshyn:
Es gibt ein Analogon des Dateistroms nur im RAM.

Weil auf diese Weise vor allem einfache Typen in Bytes umgewandelt werden können:

void OnStart()
{
   int i_value = 123456;
   uchar arr_byte[4];
   arr_byte[0] = (uchar)(i_value & 0x000000FF);
   arr_byte[1] = (uchar)((i_value & 0x0000FF00) >> 8);
   arr_byte[2] = (uchar)((i_value & 0x00FF0000) >> 16);
   arr_byte[3] = (uchar)((i_value & 0xFF000000) >> 32);
   ArrayPrint(arr_byte);

// проверим собрав обратно из байт int

   union _int
   {
      int i;
      uchar c[sizeof(int)];
   } ui;
   ArrayCopy(ui.c, arr_byte);
   Print(ui.i);
}

dieser Code (erster Teil) sollte auch in C# funktionieren, zumindest hatte ich noch nie Probleme mit Integer-Typen, es scheint bereits Variante #3 zu sein

Sie können meinen Code in eine Schleife verpacken, um ihn etwas kompakter zu machen

UPD:

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int i_value = 123456;
            uint mask = 0x000000FF;
            byte[] arr_byte = new byte[4];
            for(int i=0; i<4; i++)
            {
                arr_byte[i] = (byte)((i_value & mask) >> i*8);
                mask <<= 8;
                Console.WriteLine(arr_byte[i]);
            }
            Console.ReadLine();
        }
    }
}
 
Igor Makanu:

Beachten Sie, dass C# ist das Geistesprodukt von Microsoft für alle Nicht-Programmierer, und was in MQL ist in ein paar Zeilen in C# getan, in der Tat, ist einfach nicht vorgesehen für

In der Tat! Und "Nicht-Programmierer" wissen aus irgendeinem Grund nicht, dass dies "nicht vorgesehen" ist.
Dateien: