【发布时间】:2013-12-06 20:30:02
【问题描述】:
我在我的 C++ 类中有一个奇怪的分配,我必须使用 float 类型在二进制文件 (132.147) 中写入某个数字,然后使用 char 类型读取它,这样最终结果将是每个字节的十进制值(-94、37、4 和 67)。
fstream binFile("blah.bin", ios::binary|ios::in|ios::out);
float a = 132.147;
binFile.write((char*)&a, sizeof(float));
char b[4];
binFile.read((char*)&b, sizeof(b));
cout << (int)b[0] << ' ' << (int)b[1] << ' ' << (int)b[2] << ' ' << (int)b[3] << endl; // -51 -51 -51 -51
cout << b[0] << ' ' << b[1] << ' ' << b[2] << ' ' << b[3]; // = = = =
binFile.close();
return 0;
我知道他们从哪里得到这 4 个数字。如果我编写文件并使用十六进制编辑器读取它,我会得到 4 个十六进制数字,一旦转换为有符号二进制,就可以转换为十进制形式。但是,我完全不知道如何在 C++ 中以编程方式执行此操作。有什么线索吗?
谢谢!
【问题讨论】:
-
你快到了。您关闭了文件,因此您必须重新打开它才能再次阅读。您还想读取 4 个字节,而不是 10 个(sizeof(b)==10,因为您将其设为 10 个元素)。注意,当你写一个浮点数时,使用
sizeof(float)而不是sizeof(int)