IOStream 运算符<<从 C++ 到 C# 的转换
IOStream operator<< Conversion from C++ to 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();
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
}
}
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 重载ostream&时转换错误无效;operator< & lt;