Ошибки, баги, вопросы - страница 2690

Aliaksandr Hryshyn:

Там есть такое:

Много перегруженных методов:

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

это аналог работы с файлами в MQL с флагом FILE_BIN 

если не ошибаюсь, то Вы же не с файлами работать хотели, а просто сериализовать простой тип данных в байтовый массив

Igor Makanu:

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

это аналог работы с файлами в MQL с флагом FILE_BIN 

если не ошибаюсь, то Вы же не с файлами работать хотели, а просто сериализовать простой тип данных в байтовый массив

FileStream

MemoryStream

И файлы и память.

Почему у вас такая неприязнь к C# :)?
Aliaksandr Hryshyn:

FileStream

MemoryStream

И файлы и память.

Почему у вас такая неприязнь к C# :)?

про неприязнь Вы придумали,я лишь написал, что язык для непрограммистов, что соответствует очень доброжелательный к пользователю, если быть конкретным 

про файловые потоки, что то Вы совсем усложнили простую задачу

суть моего обращения к Вам, что в части работы с "сырыми данными" MQL очень продвинутый язык, еще один пример - в MQL выравнивание структур по умолчанию отсутствует, это удобно для пользователя

Igor Makanu:

про неприязнь Вы придумали,я лишь написал, что язык для непрограммистов, что соответствует очень доброжелательный к пользователю, если быть конкретным 

про файловые потоки, что то Вы совсем усложнили простую задачу

суть моего обращения к Вам, что в части работы с "сырыми данными" MQL очень продвинутый язык, еще один пример - в MQL выравнивание структур по умолчанию отсутствует, это удобно для пользователя

Там есть аналог файлового потока только в оперативке.
Aliaksandr Hryshyn:
Там есть аналог файлового потока только в оперативке.

зачем? в большинстве своем простые типы в байты примерно так можно перевести:

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

такой код (первая часть) должен один в один и в C# работать, по крайней мере с целыми типами вообще проблем никогда не было, это кажется вариант № 3 уже

можно в цикл обернуть мой код, чуть компактнее будет 

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:

заметьте, что язык C# это детище Майрософт для всех прикладных недопрограммеров, и то что в MQL делается в пару строк в C# , по сути, просто не предусмотрено 

Да вы что! А "недопрограммеры" почему то не знают что это "не предусмотрено".
Файлы:
Igor Makanu:

зачем? в большинстве своем простые типы в байты примерно так можно перевести:

такой код (первая часть) должен один в один и в C# работать, по крайней мере с целыми типами вообще проблем никогда не было, это кажется вариант № 3 уже

можно в цикл обернуть мой код, чуть компактнее будет 

UPD:

Можно и сразу union использовать.

void OnStart()
  {
   uchar a[];
   UByte<int> b=0xA2F38114;
   if (b.GetArray(a))
      for (int i=0;i<sizeof(int);PrintFormat("%#x",a[i++]));
   }

template<typename T>
union UByte{
   T  val;
   uchar arr[sizeof(T)];
   T operator =(T x) {return val=x;}
   bool GetArray(uchar &mArr[]) {return ArrayCopy(mArr,arr)==sizeof(T);}
};
Vladimir Simakov:

Можно и сразу union использовать.

Когда-то такой результат был получен.

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

void f( const uchar &Array[] )
{
  ArrayPrint(Array);
  
  Print("----");
}

void OnStart()
{
  int i = 5;
  double d[] = {0, 1, 2};

  // Простые типы и их массивы
  f(_R(i).Bytes);
  f(_R(d).Bytes);
  
  MqlTick Tick = {0};
  MqlTick Ticks[2];

  // Простые структуры и их массивы.
  f(_R(Tick).Bytes);
  f(_R(Ticks).Bytes);
  
  string Str;
  string StrArray[] = {"12", "34", "56"};
    
  // Строки и их массивы.
  f(_R(Str).Bytes);
  f(_R(StrArray).Bytes);
}

Т.е. полное единообразие. И другие плюшки.

Vladimir Simakov:

Можно и сразу union использовать.

выше был такой пример, да и холивар знатный получился )))

Привет всем, вопрос следующий.

Почему при правильной нумерации индикаторных буферов их имена отображаются неправильно:

Я изменяю нумерацию на (как мне кажется) некорректную, и имена буферов отображаются правильно:

Индикатор отрисовывается корректно в том и другом варианте.

P.S. Если я делаю буфер №0 и его COLOR INDEX №1 номерами 2 и 3 соответственно, с соответствующим изменением всей нумерации, на индикаторе гистограмма (которая является буфером №0) рисуется поверх линий. А мне это не нужно.