2013-11-23 3 views
1

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

Как транспортировать/Литые двоичные данные в unsigned char буфер и это лучшее решение в этом случае?

Пример

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

Просто читать его в беззнаковые данные полукокса в первой очереди

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

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

2

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

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

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

+0

Хотя 'reinterpret_cast <неподписанные символ *> (данные)' работы и, насколько я знаю, портативный с помощью 'static_cast <беззнаковое char *> (data) 'does _not_ работать. ... и я думаю, что ваше последнее утверждение не является правильным в целом: для одного, 'char' может быть' unsigned', и я не думаю, что дополнение к нему строго требуется. –

+0

Вы абсолютно правы. – Jasper

1

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

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

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

std::streamsize n = file.read(reinterpret_cast<char*>(uData)); 
Смежные вопросы