将iostream输入代码从c++移植到c#
Porting iostream input code from C++ to C#
这是用于读取缓存内存模拟主存地址轨迹的c++代码:
char hex[20];
ifstream infile;
infile.open(filename,ios::in);
if(!infile) {
cout<<"Error! File not found...";
exit(0);
}
int set, tag, found;
while(!infile.eof()) { //Reading each address from trace file
if(base!=10) {
infile>>hex;
address = changebase(hex, base);
} else {
infile>>address;
}
set = (address / block_size) % no_set;
tag = address / (block_size * no_set);
}
我已经将其转换为c#代码:
char[] hex = new char[20];
FileStream infile=new FileStream(filename, FileMode.Open);
if (infile == null) {
Console.Write("Error! File not found...");
Environment.Exit(0);
}
int set;
int tag;
int found;
while (!infile.CanRead) { //Reading each address from trace file
if (@base != 10) {
infile >> hex;
address = changebase(hex, @base);
} else {
infile >> address;
}
set = (address / block_size) % no_set;
tag = address / (block_size * no_set);
}
问题在infile >> hex;
线上c#正在给出语法错误,因为右移操作符不能应用于字符串操作符。
为什么不工作?我正在做一个小的缓存命中率计算项目。
要量化Eric的意思:
c++在可重载的操作符方面相当灵活。位移运算符<<
和>>
也用于输入和输出已经成为一种"习惯"。这实际上是有道理的,因为这是一个逻辑结构,眼睛在物体之间记录了某种"流动"。
本质上你在做同样的事情-操作符重载只是一个很好的快捷方式,但在一天结束时一些方法将被调用-可能是一个漂亮的装饰"操作符重载"或一个普通的带有名称的旧函数调用。
因此,在c++中我们可以这样写:std::cout << "Hello" << std::endl;
而在c#中我们会写:
Console.WriteLine("Hello");
如果我们忽略std::cout
可能与控制台窗口不同的事实(这是说明性的),那么概念是完全相同的。
为了扩展运算符的概念,您可能还会遇到stringstream
..类似于字符串流的类。这真的很有用:
std::stringstream ss;
int age = 25;
ss << "So you must be " << age << " years old.";
在c#中,我们通过StringBuilder
类来实现这一点:
StringBuilder sb = new StringBuilder();
int age = 25;
sb.Append("So you must be ").Append(age).Append(" years old");
它们都做完全相同的。我们还可以这样写:
sb.AppendFormat("So you must be {0} years old", age);
这更类似于(在我看来)更像c的sprintf
方法,或者最近的boost格式库。
c#不使用奇怪的c++约定,即位移也意味着流操作。你需要调用I/o的方法
相关文章:
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 需要从 istream 和 ostream 派生 iostream
- std::带有自定义缓冲区的 iostream 不允许我写入
- 新的放置取决于 iostream
- 包含在 <initializer_list> <iostream>?
- 为什么在包含iostream时可以使用printf()?
- 如果 iostream 对象不可复制,为什么以下代码是合法的?
- 为什么我必须在包含后写 std::cin <iostream>?
- 如何将带有空字符的字节数组馈送到 std::iostream 中?
- 磁力计代码:C++ vs C - iosstream,矢量 - 错误iostream:没有这样的文件或目录
- 通过boost asio iostream下载大文件的最快方法是什么?
- 为什么 VScode 在 .h 文件中显示"'iostream' file not found"?
- 包含iostream导致不同的二进制文件
- iostream运算符重载的C++异常规范
- basic_iostream和iostream之间的区别
- iostream 和 fstream 的重载<<
- Borland C++编译器中的Iostream
- 从类模板继承时需要iostream
- 为什么<iostream>依赖MinGW dll?
- 如何保证不包括 iostream?