エラー、バグ、質問 - ページ 2690

 

こんにちは。

何がエラーになるのでしょうか?同じインジケーターを2つチャート上に配置し、1つ目のインジケーターの線の色を変更すると、2つ目のインジケーターも線の色が変わりますが、2つ目のインジケーターは何も変えません。グローバル変数は ありません。

 
Nikolai Semko:

理屈がわからないんです。
シンプルなタイプの場合、まず、そうすることができます。

第二に

と、松葉杖ばかりではありません。

の結果は、どちらの場合も同じです。

17*256+92=4444

一つの関数の中で構造体用の配列にデータを書き込めるのなら、単純な型でも同じように書き込めるはずだという理屈です。

さて、ここでの状況は非常にシンプルです。

 
Aliaksandr Hryshyn:

関数内の構造体に対してデータを配列に書き込めるのであれば、単純な型に対しても同じように書き込めるはずだという論理です。

この論理を、あなたの意見以外のもので確認したいのですが。

興味のある方は「C# struct to byte array」でググってみてください。

MQLでは数行で終わることが、C#では単に提供されていないだけです。ググった例では、すべてがMarshalを介して行われ、これはアンマネージコードでの作業、つまり.Netの外側での作業です。MQL用語では「これは.dll呼び出しです」。


そういう論理なんだ...。

 
Igor Makanu:

この論理を、あなたの意見以外のもので確認したいのですが。

興味のある方は「C# struct to byte array」でググってみてください。

MQLでは数行で終わることが、C#では単に提供されていないだけです。ググった例では、すべてがMarshalを介して行われ、これはアンマネージコードでの作業、つまり.Netの外側、MQL用語では「.dllの呼び出し」なのです。


そういう論理なんだ...。

それがたくさんあるんです。

BinaryWriter.Write Method

オーバーロードされたメソッドが たくさんある。

Write(UInt64)   
Write(UInt32)   
Write(UInt16)
.....
 
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フラグを使用してファイルを操作するのと似ています。

間違っていなければ、単純なデータ型をバイト配列に直列化したいのでしょう

ファイルストリーム

メモリーストリーム

ファイルもメモリも。

どうしてそんなにC#が嫌いなんですか :)?
 
Aliaksandr Hryshyn:

ファイルストリーム

メモリーストリーム

ファイルもメモリも。

なぜC#に対してそこまで嫌悪感を抱くのでしょうか :)?

あなたが捏造した敵意について、私はただ、この言語はノンプログラマーのためのものであり、それはユーザーにとって 非常にフレンドリーであることに相当すると書きました、具体的に言えば

ファイルストリームについては、単純な作業を非常に複雑にしています。

私の質問の本質は、MQLは「生のデータ」を扱うという点で非常に高度な言語であるということです。もう一つの例として、MQLにはデフォルトの構造アライメントがなく、ユーザーにとって 便利であることです

 
Igor Makanu:

あなたが作り上げた敵意についてですが、私はただ、この言語はノンプログラマーのためのもので、非常にユーザーフレンドリーに 対応していると書いただけです、具体的には

ファイルストリームについては、単純な作業を非常に複雑にしています。

私の質問の本質は、MQLは「生データ」の処理という点で非常に高度な言語であるということです。もう一つの例として、MQLにはデフォルトの構造アライメントがなく、ユーザーにとって 便利です

RAMの中だけにファイルストリームのアナログがあるんです。
 
Aliaksandr Hryshyn:
ファイルストリームのアナログは、RAM上にしかありません。

なぜかというと、ほとんどの単純な型はこの方法でバイトに変換することができるからです。

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#では、実際には、単に提供されていないだけです。

確かに!?そして「ノンプログラマー」は、それが「規定されていない」ことをなぜか知らないのです。
ファイル: