我试图在c ++中将文件的二进制文件读入vector<char>
,但读取函数似乎表现得像传值,即使它不是。
这是我的简化代码:
#define sz 4096
int main(){
string filename="a/file/path";
vector<char> block_hex;
read_Xbytes(filename, 0, sz, block_hex);
cout << "\nnum bytes: " << block_hex.size() << " size: " << sz << endl;
}
void read_Xbytes(string fpath, int pos, int Xbytes, vector<char>& bytes) {
ifstream is;
is.open(fpath, ios::binary);
is.ignore(pos);
if (Xbytes > 0) {
bytes.reserve(Xbytes);
is.read((char*)&bytes[0], Xbytes);
}
is.close();
for (int i = 0; i < 16; i++)
cout << hex(bytes[i]) << " ";
cout << endl;
}
hex
函数正在打印每个字节的十六进制值。在功能内部,它完美地工作;我查看了一个十六进制编辑器HxD
,没有问题。但是,在main
中,它打印出 num字节:0大小:4096 。
我尝试将功能更改为vector<char> read_Xbytes(string fpath, int pos, int Xbytes)
,结果仍然相同。
我想知道为什么函数的行为类似于传值?我真的找不到任何有用的东西。
我正在使用Windows 7和Visual Studio 2015.