Что такое C ++ 11 способ чтения двоичных файлов (по 16 бит за раз)? - PullRequest
0 голосов
/ 07 мая 2018

Я хочу прочитать двоичный файл в 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 голосов
/ 07 мая 2018

В C ++ нет новых API для чтения файлов.

Если файл помещается в вашу оперативную память, самый оптимальный способ - отобразить его в память и получить к нему доступ в виде байтового массива. Однако стандартная библиотека C ++ не предоставляет API для этого. Вы можете сделать это с помощью Boost, см. Boost.Interprocess Mapped Files .

Обычный совет остается неизменным: начните с простого и правильно работающего кода, сравнительного теста и посмотрите, является ли узким местом чтение файлов.

...