我想以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中有更好的(更安全或更快)的方法吗?
答案 0 :(得分:1)
在C ++ 11中没有新的API读取文件。
如果文件适合您的RAM,最佳方法是将其映射到内存并以字节数组的形式访问它。但是,C ++标准库不提供API。您可以使用Boost执行此操作,请参阅Boost.Interprocess Memory Mapped Files。
通常的建议是:从简单且正确工作的代码开始,基准测试并查看文件读取是否是瓶颈。