【发布时间】: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 <iostream> -
试过 mingw 和 visual studio 都没有成功。 #include
出现在顶部并且偶尔被错误复制。很高兴听到它有效) -
附带说明,当您不将流用于输入和输出时,通常应使用
std::ofstream而不是std::fstream和out标志。 -
也许字节序问题会导致该问题?
-
发现错误来源:变量 uid1。它的值为 0x10000079。仔细看:如果我们转换为 char 数组,它会变成 {10, 00, 00, 79}。 "00" 打破一切!为 uid1=0x10203079 分配新值,一切正常!我看到十六进制的“79 30 20 10”!我需要一些想法如何解决这个问题......
标签: c++ std fstream binaryfiles