【问题标题】:std::fstream saves variable to file wrongstd::fstream 将变量保存到文件错误
【发布时间】:2018-08-11 17:30:19
【问题描述】:

问题解决了!感谢@ewindes!我可能会在 mu 项目中走得更远! Notepad++ Hex Editor Plugin 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;
}

我更多地使用代码并得到了非常奇怪的结果。文件“test”包含如上的废话:

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

【问题讨论】:

  • 按预期为我工作。 Mac OS 铿锵声。必须修复缺失的包括:#include &lt;iostream&gt;
  • 试过 mingw 和 visual studio 都没有成功。 #include 出现在顶部并且偶尔被错误复制。很高兴听到它有效)
  • 附带说明,当您不将流用于输入和输出时,通常应使用std::ofstream 而不是std::fstreamout 标志。
  • 也许字节序问题会导致该问题?
  • 发现错误来源:变量 uid1。它的值为 0x10000079。仔细看:如果我们转换为 char 数组,它会变成 {10, 00, 00, 79}。 "00" 打破一切!为 uid1=0x10203079 分配新值,一切正常!我看到十六进制的“79 30 20 10”!我需要一些想法如何解决这个问题......

标签: c++ std fstream binaryfiles


【解决方案1】:

Notepad++ 十六进制编辑器插件 v0.9.5 中的错误。我用 WinHex 和 Xplore 打开,看到 79 00 00 10。我相信它也匹配...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2018-03-04
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多