读取二进制文件(一次 16 位)的 C++11 方式是什么?
What is the C++11 way of reading binary files (16-bits at a time)?
我想读取一个 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 中有更好(更安全或更快)的方法吗?
C++11 中没有新的 API 读取文件。
如果文件适合您的 RAM,最佳方法是将其映射到内存并以字节数组的形式访问它。但是,C++ 标准库没有为此提供 API。不过,您可以使用 Boost 做到这一点,请参阅 Boost.Interprocess Memory Mapped Files.
不过,通常的建议仍然有效:从简单且正确工作的代码开始,进行基准测试,看看文件读取是否是瓶颈。
我想读取一个 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 中有更好(更安全或更快)的方法吗?
C++11 中没有新的 API 读取文件。
如果文件适合您的 RAM,最佳方法是将其映射到内存并以字节数组的形式访问它。但是,C++ 标准库没有为此提供 API。不过,您可以使用 Boost 做到这一点,请参阅 Boost.Interprocess Memory Mapped Files.
不过,通常的建议仍然有效:从简单且正确工作的代码开始,进行基准测试,看看文件读取是否是瓶颈。