IOStream运算符<<从C ++转换为C#

时间:2013-07-31 19:29:02

标签: c# c++

我正在尝试将一些旧的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();

3 个答案:

答案 0 :(得分:3)

C ++标准库分别将bitshift运算符(<<>>)重载为“写入流”和“从流读取”。在这种情况下,fin是一个文件流; fin >> num表示从文件中读取(直到下一个空白字符),解析数据以匹配变量num(整数)的格式,并将其存储到num。< / p>

答案 1 :(得分: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)个双打

答案 2 :(得分:-1)

在这种情况下,&gt;&gt;运营商将数据从文件流流式传输到我认为是双倍的数据。以下是代码在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
    }
}