std :: fstream将变量保存到文件错误

时间:2018-08-11 17:30:20

标签: c++ std fstream binaryfiles

问题解决了!感谢@ewindes!我可能会与亩项目走得更远! Notepad ++ Hex Editor插件v0.9.5中的错误。我打开WinHex和Xplore,然后看到 79 00 00 10 。我相信也很匹配...

我希望在十六进制编辑器中看到 79 00 00 10 ,但请参阅 79 e1 80 80 。 在mingw 5.3.0中使用代码块。尝试使用Visual Studio 10并获得了相同的结果。

为什么不能正确保存变量?

代码很简单,看起来很正确:

#include <iostream>
#include <fstream>
#include <stdint.h>

using namespace std;
const uint32_t uid1 = 0x10000079;

int main()
{
    std::fstream fs;
    fs.open("e32.exe", std::fstream::trunc | std::fstream::binary | std::fstream::out);
    fs.write((const char*)&uid1, sizeof(uid1));
    fs.close();
    cout << "Hello world!" << endl;
    cout << "sizeof(uid1): " << sizeof(uid1) << endl;
    return 0;
}

我更多地使用代码,但结果却很奇怪。文件“测试”包含上述废话:

FILE *fp;
if((fp=fopen("test", "wb"))==NULL) {
    printf("Cannot open file.");
    return 1;
}
char *data = (char *)&uid1;
fwrite(&data[0], 1, 1, fp);
printf("data[0] %x\n", data[0]);
fwrite(&data[1], 1, 1, fp);
printf("data[1] %x\n", data[1]);
fwrite(&data[2], 1, 1, fp);
printf("data[2] %x\n", data[2]);
fwrite(&data[3], 1, 1, fp);
printf("data[3] %x\n", data[3]);
fclose (fp);

但是uid1包含有效数据:

data[0] 79
data[1] 0
data[2] 0
data[3] 10

1 个答案:

答案 0 :(得分:0)

Notepad ++ Hex Editor插件v0.9.5中的错误。我打开WinHex和Xplore,然后看到79 00 0010。我相信这也很匹配...