我目前正试图模仿Python的功能:
def read_two_symbols(fdescr):
return(file.read(2))
myfile = open('mytext.txt', 'rb')
two_symbols = read_two_symbols(myfile)
print(two_symbols)
有没有办法在C ++中做到这一点?这就是我尝试过的:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
string read_two_bytes(fstream file)
{
string byte1, byte2;
byte1 = file.get();
byte2 = file.get();
string two_bytes = byte1 + byte2;
return two_bytes;
}
int main()
{
fstream myfile("mytext.txt", ios_base::in | ios_base::binary);
string two_bytes = read_two_bytes(myfile);
cout << two_bytes << endl;
return 0;
}
然而它失败了。 :-(我怎么能用C ++做到?
答案 0 :(得分:1)
使用read
中的readsome
或istream
功能。 e.g
std::vector<char> buffer(2, 0);
if (myfile.read(&buffer[0], 2))
std::copy(buffer.begin(), buffer.end(), std::ostream_iterator<int>(std::cout, ""));
答案 1 :(得分:1)
将功能定义更改为此(注意&
符号):
string read_two_bytes(fstream & file)
答案 2 :(得分:1)
@vivek指出你无法通过值传递fstream
“。按值传递事物会使它们复制(或者更确切地说,运行它们的复制构造函数,这些构造函数可能会或可能不会实际制作它们的“深层”副本)。
一旦你解决了这个问题,iostream
实际上是可爱和可爱的。他们可以检测您要求的类型并只读取该数据量。如果它是一个char并且您使用流操作符,它将读取一个字节值:
string read_two_bytes(fstream& file)
{
char byte1, byte2;
file >> byte1 >> byte2;
string two_bytes;
two_bytes += byte1;
two_bytes += byte2;
return two_bytes;
}
2
所以它看起来有点矫枉过正。它可以做得更容易,但很高兴知道灵活性在那里......不是吗?
如果您是C ++ I / O的新手,您可能会找到这个问题的答案,我打算在前几天写一篇有趣的内容,与其他答案所建议的方法形成鲜明对比: