【发布时间】:2014-02-20 08:14:59
【问题描述】:
vector<byte> h;
ifstream fin(file.c_str(), ios::binary);
if(!fin)
return false;
byte b;
while(fin >> b)
h.push_back(b);
h 的长度为 4021,而原始文件长度为 4096 字节。但是下面的代码给出了一个 4096 字节的字符串。为什么?
ostringstream sout;
sout << fin.rdbuf();
string s = sout.str();
更新:
@user2079303 解决了我的问题,但任何其他方式来执行阅读任务。太容易弄错了。
【问题讨论】:
-
您能否缩短文件,使 bas64 编码的版本足够短,以便将其添加到问题中,同时仍然显示问题?
-
你确定原始文件长度是 4096 字节吗?某些文件系统的默认块大小为 4096 字节。在通常的文件系统中,任何小于块大小的文件都将占用一个块的硬盘空间。
-
@user2079303 是的,正好是 4096 字节。丢失的数据在中间某处。我使用
fin.tellg()输出当前位置。发现当我得到 2000 字节时,向量长度是 1995。 -
byte类型从何而来? -
@Oswald
windows.h可能定义了一个像#define unsigned char byte这样的微。我正在使用 win32 编程。