Erros, bugs, perguntas - página 2690

 

Hi.

Qual poderá ser o erro? Coloco duas cópias do mesmo indicador no gráfico, mudo a cor das linhas no primeiro indicador, a cor das linhas também muda no segundo, mas não mudo nada no segundo. Não existem variáveis globais.

 
Nikolai Semko:

Não vejo qualquer lógica nisso.
Para tipos simples, em primeiro lugar, é possível fazê-lo:

em segundo lugar, é:

e nem tudo são muletas.

resultar em ambos os casos:

17*256+92=4444

A lógica é que se for possível escrever dados numa matriz para estruturas dentro de uma função, deve ser o mesmo para tipos simples.

Muito bem, a situação aqui é bastante simples.

 
Aliaksandr Hryshyn:

A lógica é que se os dados podem ser escritos numa matriz para estruturas dentro de uma função, deve ser o mesmo para tipos simples.

Gostaria de confirmar esta lógica com outra coisa para além da sua opinião.

google "C# structure to byte array", se estiver interessado.

Note-se que C# é uma criação da Microsoft para todos os não programadores, e o que em MQL é feito em algumas linhas, em C#, de facto, simplesmente não é fornecido - em exemplos no Google tudo é feito via Marshal, e isto é trabalho com código não gerido, ou seja, está fora de .Net - em termos de MQL - "isto é uma chamada .dll".


é assim que é lógico...

 
Igor Makanu:

Gostaria de confirmar esta lógica com outra coisa para além da sua opinião.

google "C# structure to byte array", se estiver interessado.

Note-se que C# é uma criação da Microsoft para todos os não programadores, e o que em MQL é feito em algumas linhas, em C#, de facto, simplesmente não é fornecido - em exemplos no Google tudo é feito via Marshal, e isto é trabalho com código não gerido, ou seja, está fora de .Net - em termos de MQL - "é uma chamada de um .dll".


É assim que é lógico...

Há muito disso aí dentro:

BinaryWriter.Write Method

Muitos métodos sobrecarregados:

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

Existe tal coisa:

Muitos métodos sobrecarregados:

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

Isto é análogo a trabalhar com ficheiros em MQL com a bandeira FILE_BIN

Se não me engano, não queria trabalhar com ficheiros, mas apenas seriar um tipo de dados simples numa matriz de bytes

 
Igor Makanu:

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

Isto é análogo a trabalhar com ficheiros em MQL com a bandeira FILE_BIN

Se não estou enganado, quer serrar um tipo de dados simples para uma matriz de bytes

FileStream

MemoryStream

Tanto os ficheiros como a memória.

Porque é que não gosta tanto de C# :)?
 
Aliaksandr Hryshyn:

FileStream

MemoryStream

Tanto os ficheiros como a memória.

Porque é que tem uma aversão tão grande a C# :)?

Sobre a hostilidade que inventaram, escrevi apenas que a linguagem é para não programadores, o que corresponde a uma linguagem muito amigável para o utilizador, para ser específica

sobre fluxos de ficheiros, tornou uma tarefa simples bastante complicada

A essência da minha pergunta é que o MQL é uma linguagem muito avançada em termos de tratamento de "dados brutos", mais um exemplo - o MQL não tem um alinhamento padrão da estrutura, é conveniente para os utilizadores

 
Igor Makanu:

Acabei de escrever que a língua é para os não-programadores, o que corresponde a uma linguagem muito fácil de usar, para ser específica

sobre fluxos de ficheiros, tornou uma tarefa simples bastante complicada

A essência da minha pergunta é que o MQL é uma linguagem muito avançada em termos de tratamento de "dados brutos", mais um exemplo - o MQL não tem um alinhamento padrão da estrutura, é conveniente para os utilizadores

Existe um análogo de um fluxo de ficheiros apenas na RAM.
 
Aliaksandr Hryshyn:
Existe um análogo de fluxo de ficheiros apenas na RAM.

Porquê? a maioria dos tipos simples podem ser convertidos em bytes desta forma:

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 (primeira parte) também deve funcionar em C#, pelo menos nunca tive problemas com tipos inteiros, parece que a variante #3 já

pode enrolar o meu código num laço para o tornar um pouco mais 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:

Note que C# é a criação da Microsoft para todos os não programadores, e o que em MQL é feito em algumas linhas em C#, na verdade, simplesmente não é fornecido para

De facto! E os "não programadores" não sabem, por alguma razão, que "não está previsto".
Arquivos anexados:
Razão: