我有一个定义如下的向量:
std::vector<char> contents;
我的目标是将文件读入BYTE数组,这是一个unsigned char的typedef。我的尝试如下:
BYTE rgbPlaintext[] = {0x00};
std::ifstream in;
std::vector<char> contents;
in.open("test.dat", std::ios::in | std::ios::binary);
if (in.is_open())
{
// get the starting position
std::streampos start = in.tellg();
// go to the end
in.seekg(0, std::ios::end);
// get the ending position
std::streampos end = in.tellg();
// go back to the start
in.seekg(0, std::ios::beg);
// create a vector to hold the data that
// is resized to the total size of the file
contents.resize(static_cast<size_t>(end - start));
// read it in
in.read(&contents[0], contents.size());
BYTE *rgbPlaintext = (BYTE*)&contents[0] ;
}
但是当我将rgbPlainText写入文件时,使用以下内容:
std::ofstream f("testOut.dat",std::ios::out | std::ios::binary);
for(std::vector<char>::const_iterator i = contents.begin(); i != contents.end(); ++i)
{
f << *rgbPlaintext;
}
这只是一行空值。 test.dat文件包含清晰的文本。我怎样才能让它正常工作?当我将向量更改为unsigned char而不是现在定义的char时,我在“read it in”步骤中遇到错误,说预期的参数类型是char *而输入的参数是unsigned char *。所以问题如下:
谢谢。
答案 0 :(得分:2)
这里有一个范围问题。如果你说BYTE *rgbPlaintext = (BYTE*)&contents[0] ;
,你在rgbPlaintext
语句后面的花括号内声明了一个名为if
的变量。从编译器的角度来看,这与您在程序开头声明的rgbPlaintext
不同。只要您为第二个rgbPlaintext
分配一个值,就会遇到结束大括号,这只会导致该值被丢弃。
顶部的陈述应为
BYTE *rgbPlaintext;
和结束大括号之前的最后一个语句应该是
rgbPlaintext = (BYTE*)&contents[0] ;
没有 BYTE *
部分。
这样,您仍然可以在rgbPlaintext
声明后的代码中访问if
。