-2

一部の古い C++ コードを C# に変換しようとしていますが、次のコードの機能と C# への変換方法を理解するのが困難です。

ifstream fin;
fin.open(file, ios::nocreate);

if (!fin)
{
    m_iErrorNumber = 1567;
    num = 0.0;
}
else
{
    for (int x = 0; x < count; x++)
    {
        fin >> num;  //  <==== THIS LINE IS PROBLEM!!
    }
};

fin.close();
4

3 に答える 3

3

<<C++ 標準ライブラリは、ビットシフト演算子 (と) をオーバーロードして>>、それぞれ「ストリームへの書き込み」と「ストリームからの読み取り」を意味します。この場合、finはファイル ストリームです。fin >> numファイルから (次の空白文字まで) 読み取り、変数num(整数)の形式に一致するようにデータを解析し、 num.

于 2013-07-31T19:32:38.443 に答える
2

これはおそらく C++ コードとはセマンティクスが若干異なりますが、比較的似ているはずです。

IEnumerable<string> ReadWhiteSpaceSeparated(string filename)
{
    using(var lines = File.ReadLines(filename))
    {
        return lines.SelectMany(line => line.Split(new []{' ','\t', '\r', '\n'}, StringSplitOptions.RemoveEmptyEntries));
    }
}

IEnumerable<string> ReadDoubles(string filename)
{
     return ReadWhiteSpaceSeparated(filename)
         .Select(s => double.Parse(s, CultureInfo.InvariantCulture));
}

count次に、ファイルから double を読み取ることができますReadDoubles(filename).Take(count)

于 2013-07-31T19:42:48.990 に答える
-1

この状況では、>> 演算子は、ファイル ストリームから double であると想定するものにデータをストリーミングしています。C# でのコードは次のようになります (float のみを使用している場合は、8 を 4 に変更します)。

using (var stream = System.IO.File.Open(file, System.IO.FileMode.Open))
{ 
    var data = new byte[8]; // temp variable to hold byte data from stream
    for(var x = 0; x < count; ++x)
    {
        stream.Read(data, 0, 8);
        num = System.BitConverter.ToDouble(data, 0); // convert bytes to double
        // do something with num
    }
}
于 2013-07-31T19:43:44.353 に答える