考虑以下片段,它获取一些二进制数据并将其写入ostringstream
对象:
unsigned char* payload;
unsigned long size;
GetData(&payload, &size);
std::cout << md5(payload, size) << std::endl;
std::ostringstream stream;
stream.write((const char*)payload, size);
std::cout << md5(payload, size) << std::endl;
问题是,两个打印的哈希值彼此不同,这意味着payload
已经改变。stream
我尝试使用二进制模式打开std::ostringstream stream(std::ios::out | std::ios::binary)
打开,它没有任何区别,我没想到它会,无论如何。
另一个事实是,每次我重新运行程序时,我都会从第二个打印语句中得到不同的校验和。第一个哈希总是相同的。
现在,如何将二进制数据正确写入 ostringstream?问题可以转换为const char*
(GetData
方法将 anunsigned char**
作为第一个参数)吗?
更新:根据评论,这里有更多解释:
- 比较原始数据和写入数据的二进制差异,我看到写入的数据在某些地方向右移动(24 字节)。它在开始时还添加了一些字节。我仍然认为这与演员阵容有关。
GetData
和实际编写之间没有更多的代码。- GetData 工作正常,因为调用它后的校验和是正确的(我知道校验和应该是什么)。
- 我无法发布可编译的代码,因为
GetData
. 而且没有必要,我已将问题隔离到write
被调用的行。 - 系统详细信息为: Ubuntu 12.04 64bit 上的 gcc 版本 4.6.3