Я хочу читать беззнаковые байты из двоичного файла. Итак, я написал следующий код.C++ чтение unsigned char из потока файлов
#include <iostream>
#include <fstream>
#include <vector>
#include <istream>
std::string filename("file");
size_t bytesAvailable = 128;
size_t toRead = 128;
std::basic_ifstream<unsigned char> inf(filename.c_str(), std::ios_base::in | std::ios_base::binary) ;
if (inF.good())
{
std::vector<unsigned char> mDataBuffer;
mDataBuffer.resize(bytesAvailable) ;
inF.read(&mDataBuffer[0], toRead) ;
size_t counted = inF.gcount() ;
}
Это приводит к постоянному считыванию 0 байтов, как показано подсчитанной переменной.
Кажется, в Интернете есть ссылки, в которых говорится, что мне нужно установить локаль, чтобы выполнить эту работу. Как это сделать мне точно не ясно.
Тот же самый код работает, используя тип данных «обугленный» вместо «неподписанного символа»
выше кода, используя символ без знака, кажется, работает на Windows, но терпит неудачу работает в CoLinux Fedora 2.6.22.18.
Что мне нужно сделать, чтобы заставить его работать в Linux?
Не ответ на этот вопрос, но связаны между собой.Помните, что определение строкового класса в C++ - это 'typedef basic_string string;', поэтому вы всегда можете сделать строковый класс unsigned char a la 'typedef basic_string bytestring;'. –
true, но я хочу прочитать файл BINARY – David
.read() и .write() могут использоваться для двоичного/текстового потока, операторы потока << and >> предназначены только для текстовых файлов. Все данные на компьютере в конечном счете являются двоичными, это то, как вы его интерпретируете. – sfossen