逐字节读取二进制文件

时间:2013-11-22 03:57:31

标签: c++ binary char hex byte

我在C ++类中有这个奇怪的赋值,我必须在二进制文件(132.147)中使用float类型编写一个特定的数字,然后使用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 ++中以编程方式执行此操作。任何线索?

谢谢!

1 个答案:

答案 0 :(得分:1)

正如亚当所说,你必须重新打开文件。您可能已经注意到,如果您已从读取中检查返回值,则它不会读取。你只需要读取sizoef一个字节,但要求阅读更多是无害的。读完之后......

cout << (int)b[0] << ' ' << ...