【发布时间】:2015-06-27 10:20:49
【问题描述】:
我正在尝试将一些二进制数据(PDF 文件)转换为 base64 编码,然后将这些数据放入 xml 文件中以进行某些网络操作。
现在的问题是,我相信我没有正确地将 pdf 文件读取(参考下面的方法)到内存缓冲区中。在读取 pdf 数据后,我进入字符缓冲区并传递给编码器方法的是返回一些 base64 编码的字符串,但是在解码时,无法恢复原始数据。
我在 char 缓冲区中获取二进制数据,如下所示:
有人指点我吗?
void readBinaryFile()
{
ifstream in("sampleFile.pdf", ios::binary);
in.seekg(0, ios::end);
int iSize = in.tellg();
in.seekg(0, ios::beg);
char* pBuff = new char[iSize];
memset(pBuff, 0, sizeof(pBuff));
in.read(pBuff, iSize);
in.close();
//some more code...
}
如果我将此缓冲区数据写入另一个文件,则可以很好地创建具有相同内容的 pdf 文件,但我猜这种 char 缓冲区无法正确编码或解码。
【问题讨论】:
-
为什么将缓冲区设置为全0?这是白费力气。
-
那是初始化。这有什么问题?
-
您的
read将覆盖您的数据,因此初始化是白费力气。这在大缓冲区上会很明显。 -
是什么让你认为问题出在文件读取代码中?我没有看到任何明显错误,除了
sizeof(pBuff)错误,只要文件至少有 8 个字节长,它就无害。