Errores, fallos, preguntas - página 2690

 

Hola.

¿Cuál puede ser el error? Coloco dos copias del mismo indicador en el gráfico, cambio el color de las líneas en el primer indicador, el color de las líneas también cambia en el segundo, pero no cambio nada en el segundo. No hay variables globales.

 
Nikolai Semko:

No veo ninguna lógica en ello.
Para los tipos simples, en primer lugar, puede hacerlo:

En segundo lugar, lo es:

y no todo son muletas.

resultado en ambos casos:

17*256+92=4444

La lógica es que si se pueden escribir datos en un array para estructuras dentro de una función, debería ser lo mismo para los tipos simples.

Bien, la situación aquí es bastante simple.

 
Aliaksandr Hryshyn:

La lógica es que si los datos se pueden escribir en un array para las estructuras dentro de una función, debería ser lo mismo para los tipos simples.

Me gustaría confirmar esta lógica con algo más que tu opinión.

Busca en Google "C# struct to byte array" si te interesa.

Tenga en cuenta que C# es una creación de Microsoft para todos los no programadores, y lo que en MQL se hace en un par de líneas, en C#, de hecho, simplemente no se proporciona - en los ejemplos buscados en Google todo se hace a través de Marshal, y esto es el trabajo con el código no administrado, es decir, está fuera de .Net - en términos de MQL - "esta es una llamada .dll".


así es como es lógico...

 
Igor Makanu:

Me gustaría confirmar esta lógica con algo más que tu opinión.

Busca en Google "C# struct to byte array" si te interesa.

Tenga en cuenta que C# es una creación de Microsoft para todos los no programadores, y lo que en MQL se hace en un par de líneas, en C#, de hecho, simplemente no se proporciona - en los ejemplos buscados en Google todo se hace a través de Marshal, y esto es el trabajo con el código no administrado, es decir, está fuera de .Net - en términos de MQL - "es una llamada de un .dll".


Así de lógico es...

Hay mucho de eso ahí:

BinaryWriter.Write Method

Muchos métodos sobrecargados:

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

Hay esto:

Muchos métodos sobrecargados:

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

Esto es análogo a trabajar con archivos en MQL con la bandera FILE_BIN

Si no me equivoco, no querías trabajar con ficheros, sino simplemente serializar un tipo de datos simple en una matriz de bytes

 
Igor Makanu:

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

Esto es análogo a trabajar con archivos en MQL con la bandera FILE_BIN

Si no me equivoco, quieres serializar un tipo de datos simple en una matriz de bytes

FileStream

MemoryStream

Tanto los archivos como la memoria.

¿Por qué tienes tanta aversión a C# :)?
 
Aliaksandr Hryshyn:

FileStream

MemoryStream

Tanto los archivos como la memoria.

¿Por qué tienes tanta aversión a C# :)?

Sobre la hostilidad que te has inventado, sólo he escrito que el lenguaje es para no programadores, lo que corresponde a un lenguaje muy amigable con el usuario, para ser concretos

sobre los flujos de archivos, has hecho una tarea sencilla bastante complicada

La esencia de mi pregunta es que MQL es un lenguaje muy avanzado en términos de manejo de "datos en bruto", un ejemplo más - MQL no tiene alineación de estructura por defecto, es conveniente para los usuarios

 
Igor Makanu:

Acabo de escribir que el lenguaje es para los no programadores, lo que corresponde a un muy fácil de usar, para ser específicos

sobre los flujos de archivos, has hecho una tarea sencilla bastante complicada

La esencia de mi pregunta es que MQL es un lenguaje muy avanzado en términos de procesamiento de "datos en bruto", un ejemplo más - MQL no tiene alineación de la estructura por defecto, es conveniente para los usuarios

Hay un análogo de un flujo de archivos sólo en la RAM.
 
Aliaksandr Hryshyn:
Existe un análogo del flujo de archivos sólo en la RAM.

¿Por qué? La mayoría de los tipos simples pueden ser convertidos a bytes de esta manera:

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

este código (primera parte) debería funcionar también en C#, al menos nunca he tenido problemas con los tipos enteros, parece que la variante #3 ya

puedes envolver mi código en un bucle para hacerlo un poco más compacto

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:

Tenga en cuenta que C# es la creación de Microsoft para todos los no programadores, y lo que en MQL se hace en un par de líneas en C#, de hecho, simplemente no se proporciona para

¡En efecto! Y los "no programadores" no saben por alguna razón que "no está previsto".
Archivos adjuntos:
Razón de la queja: