-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从一个文件中读取双打ReadDoubles(filename).Take(count)

于 2013-07-31T19:42:48.990 回答
-1

在这种情况下,>> 运算符将文件流中的数据流式传输到我认为是双精度的。以下是代码在 C# 中的外观(如果您只使用浮点数,请将 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 回答