【问题标题】:Read binary file byte by byte逐字节读取二进制文件
【发布时间】: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)

标签: c++ binary char hex byte


【解决方案1】:

正如亚当所说,您必须重新打开文件。如果您检查了 read 的返回值,您可能已经注意到它没有读取。您只需要读取 sizoef a 字节,但要求读取更多内容是无害的。看完后...

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

【讨论】:

  • 感谢您的回复,亚当和托尼。我已经根据您的建议在最初的问题中编辑了这段代码。这次我实际上运行了它并输入了输出。我仍然不明白——无论是在编码方面还是在理解实际情况方面。什么应该代表我在这里阅读的前 4 个字符?谢谢!
  • 我太笨了。我现在明白了。非常感谢!
猜你喜欢
  • 2012-07-11
  • 2011-07-27
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多