Чтение двоичных данных методом fstream

Мне нужно прочитать двоичные данные в буфер, но в fstreams я прочитал функцию чтения данных в буфер символов, поэтому мой вопрос:

Как перенести / привести двоичные данные в беззнаковый буфер символов и является ли это лучшим решением в этом случае?

пример

  char data[54];
  unsigned char uData[54];
  fstream file(someFilename,ios::in | ios::binary);
  file.read(data,54);
  // There to transport **char** data into **unsigned char** data (?)
  // How to?

3 ответа

Решение

Просто прочитайте это в неподписанных данных char в первую очередь

unsigned char uData[54];
fstream file(someFilename,ios::in | ios::binary);
file.read((char*)uData, 54);

Актерский состав необходим, но безвреден.

Вам не нужно объявлять дополнительный массив uData. Массив данных можно просто преобразовать в unsigned:

unsigned char* uData = reinterpret_cast<unsigned char*>(data);

При доступе к uData вы указываете компилятору интерпретировать данные по-разному, например data[3] == -1, значит uData[3] == 255

Вы могли бы просто использовать

std::copy(data, data + n, uData);

где n результат, возвращаемый из file.read(data, 54), Я думаю, специально для char* а также unsigned char* Вы также можете использовать

std::streamsize n = file.read(reinterpret_cast<char*>(uData));
Другие вопросы по тегам