什么是C ++ 11读取二进制文件的方式(一次16位)?

时间:2018-05-07 15:11:31

标签: c++11 fstream binary-data

我想以16位字读取二进制文件。现在,我正在使用std::ifstream来读入2个字符的数组c

#include <iostream>
#include <fstream>
#include <stdint.h>

int main() {
  std::ifstream file("./tetris.rom", std::ios::in | std::ios::binary);
  char c[2];
  while (file.read(c, 2)) {
    uint16_t word = (static_cast<uint8_t>(c[0]) << 8) | static_cast<uint8_t>(c[1]);
    std::cout << "word\t" << std::hex << word << std::endl;
  }
}

这对我有用,但在C ++ 11中有更好的(更安全或更快)的方法吗?

1 个答案:

答案 0 :(得分:1)

在C ++ 11中没有新的API读取文件。

如果文件适合您的RAM,最佳方法是将其映射到内存并以字节数组的形式访问它。但是,C ++标准库不提供API。您可以使用Boost执行此操作,请参阅Boost.Interprocess Memory Mapped Files

通常的建议是:从简单且正确工作的代码开始,基准测试并查看文件读取是否是瓶颈。