我的任务是读取文件内容并将它们放入std :: strings的向量数组中,然后从vector输出到另一个文件。
我设法解决了只包含普通文本的文件,但是失败了,让我们说.bmp 这是.bmp文件头:
BM)( 6 ( — к Р((
hex表示这些是NULL字节,而不是空格
42 3d 06 29 28 00 00 00 00 00 36 00 00 00 ...
结果,执行以下代码
char *buffer = new char [50];
ifstream ifs( "file.bmp" , std::ifstream::binary );
ifs >> std::noskipws;
ifs.read( buffer, 50 );
std::string abc(buffer); //output it to other file next
我最终得到缓冲区和abc字符串等于“BM”(6(-кР((...)跳过所有nullbytes。 ifs.read()直到现在都很棒。那么从文件中读取/写入N个精确字节的最舒适方式是什么?
(我做了搜索,但结果有困难)
答案 0 :(得分:2)
那太蹩脚了,但是有一天有人可能会谷歌,所以我会写一个答案。
如果在调试时你会在调用ifs.read()后将鼠标悬停在缓冲区上,你会看到“BM”(6(-кР((...“,但实际上是空字节。但是(在MSVS中)除非你将缓冲区重新定义为
,否则你无法看到实际的字节缓冲区char buffer[50];
接下来,当从缓冲区中取出std :: string时,执行
string abc(buffer); // would not copy null bytes to std string,
所以这样做:
string abc(buffer, 50); //copies all bytes.
现在我在字符串中有真实的文件内容,如果我将abc输出到其他文件,我将拥有相同的数据。
P.S。检查结果时使用十六进制编辑器查看实际字节,不要相信记事本。