IOStream运算符<<;从C++到C#的转换
本文关键字:lt 转换 运算符 IOStream C++ | 更新日期: 2023-09-27 18:25:46
我正在尝试将一些旧的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();
C++标准库重载位移运算符(<<
和>>
),分别表示"写入流"answers"从流读取"。在这种情况下,fin
是一个文件流;fin >> num
意味着从文件中读取(直到下一个空白字符),解析数据以匹配变量num
(整数)的格式,并将其存储到num
中。
这可能与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));
}
然后,您可以使用ReadDoubles(filename).Take(count)
从文件中读取count
替身
在这种情况下,>>运算符将数据从文件流流流式传输到我认为的双精度中。以下是代码在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
}
}