Errori, bug, domande - pagina 2690

 

Ciao.

Quale potrebbe essere l'errore? Metto due copie dello stesso indicatore sul grafico, cambio il colore delle linee nel primo indicatore, il colore delle linee cambia anche nel secondo, ma non cambio nulla nel secondo. Non ci sono variabili globali.

 
Nikolai Semko:

Non ci vedo nessuna logica.
Per i tipi semplici, in primo luogo, si può fare così:

in secondo luogo, lo è:

e non sono tutte stampelle.

risultato in entrambi i casi:

17*256+92=4444

La logica è che se si possono scrivere dati in un array per le strutture all'interno di una funzione, dovrebbe essere lo stesso per i tipi semplici.

Ok, la situazione qui è abbastanza semplice.

 
Aliaksandr Hryshyn:

La logica è che se i dati possono essere scritti in un array per le strutture all'interno di una funzione, dovrebbe essere lo stesso per i tipi semplici.

Mi piacerebbe confermare questa logica con qualcosa di diverso dalla tua opinione.

Cerca su Google "C# struct to byte array" se sei interessato.

Si noti che C# è un'invenzione di Microsoft per tutti i non programmatori, e ciò che in MQL è fatto in un paio di righe, in C#, infatti, semplicemente non è previsto - negli esempi googlati tutto è fatto tramite Marshal, e questo è lavoro con codice non gestito, cioè è fuori da .Net - in termini MQL - "questa è una chiamata .dll".


è così che è logico...

 
Igor Makanu:

Mi piacerebbe confermare questa logica con qualcosa di diverso dalla tua opinione.

Cerca su Google "C# struct to byte array" se sei interessato.

Si noti che C# è un'invenzione di Microsoft per tutti i non programmatori, e ciò che in MQL è fatto in un paio di righe, in C#, infatti, semplicemente non è previsto - negli esempi googlati tutto è fatto tramite Marshal, e questo è lavoro con codice non gestito, cioè, è fuori da .Net - in termini MQL - "è una chiamata di una .dll".


È così che è logico...

C'è molto di tutto questo:

BinaryWriter.Write Method

Un sacco di metodi sovraccaricati:

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

Esiste una cosa del genere:

Un sacco di metodi sovraccaricati:

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

Questo è analogo al lavoro con i file in MQL con il flag FILE_BIN

Se non mi sbaglio, non volevi lavorare con i file, ma solo serializzare un semplice tipo di dati in un array di byte

 
Igor Makanu:

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

Questo è analogo al lavoro con i file in MQL con il flag FILE_BIN

Se non mi sbaglio, volete serializzare un semplice tipo di dati in un array di byte

FileStream

MemoryStream

Sia i file che la memoria.

Perché hai una tale antipatia per C# :)?
 
Aliaksandr Hryshyn:

FileStream

MemoryStream

Sia i file che la memoria.

Perché hai una tale antipatia per C# :)?

Riguardo all'ostilità che hai inventato, ho appena scritto che il linguaggio è per non programmatori, il che corrisponde a un linguaggio molto amichevole per l'utente, per essere specifici

sui flussi di file, hai reso un compito semplice abbastanza complicato

L'essenza della mia domanda è che MQL è un linguaggio molto avanzato in termini di elaborazione di "dati grezzi", un altro esempio - MQL non ha un allineamento predefinito della struttura, è conveniente per gli utenti

 
Igor Makanu:

Ho appena scritto che il linguaggio è per non programmatori, il che corrisponde a un molto user-friendly, per essere specifici

sui flussi di file, hai reso un compito semplice abbastanza complicato

L'essenza della mia domanda è che MQL è un linguaggio molto avanzato in termini di elaborazione di "dati grezzi", un altro esempio - MQL non ha un allineamento predefinito della struttura, è conveniente per gli utenti

C'è un analogo di un flusso di file solo nella RAM.
 
Aliaksandr Hryshyn:
C'è un analogo del flusso di file solo nella RAM.

La maggior parte dei tipi semplici possono essere convertiti in byte in questo modo:

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);
}

questo codice (prima parte) dovrebbe funzionare anche in C#, almeno non ha mai avuto problemi con i tipi interi, sembra che questa sia l'opzione #3

puoi avvolgere il mio codice in un ciclo per renderlo un po' più compatto

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:

Si noti che C# è la creazione di Microsoft per tutti i non programmatori, e ciò che in MQL è fatto in un paio di righe in C#, infatti, non è semplicemente previsto

Certo! E i "non programmatori" non sanno per qualche motivo che è "non previsto".
File: