2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 C++ загрузка в вектор из бинарного файла
Сообщение10.03.2016, 12:35 
Необходимо загрузить данные в вектор типа float данные из бинарного файла. Проблема состоит в том, что бинарный файл состоит из символьной шапки и далее непосредственно чисел float в бинарном виде. Если использую std::istream_iterator <float>, то встречая символьные данные, загрузка прекращается, если использую std::istream_iterator <string>, то всё грузится в vector <string>, а мне надо в vector <float>. Можно ли загрузить через потоковые итераторы, через STL в vector?

 
 
 
 Re: C++ загрузка в вектор из бинарного файла
Сообщение10.03.2016, 13:33 
Аватара пользователя
Ну так прочитайте сначала шапку, а только потом создавайте std::istream_iterator<float>.

 
 
 
 Re: C++ загрузка в вектор из бинарного файла
Сообщение12.03.2016, 19:07 
У меня не работает следующий код:
Используется синтаксис C++
std::ifstream fstFile(namefile, std::ios::binary);
fstFile.seekg(sizeHeader, std::ios::beg);
std::istream_iterator<float> dataBeginF(fstFile);
std::istream_iterator<float> dataEnd;
std::vector<float> data(dataBeginF, dataEnd);


Причём seekg устанавливает указатель на начало чисел, что видно, если использовать вместо итератора float итератор string.

 
 
 
 Re: C++ загрузка в вектор из бинарного файла
Сообщение13.03.2016, 11:05 
Аватара пользователя
std::istream_iterator<float> считывает из файла строку символов до первого пробела (табуляции, конца строки), проверяет эту строку на соответствие правилам записи литералов типа float, и, если всё в порядке, создаёт на основе этой строки соответствующее бинарное представление. Но данные в вашем файле уже в бинарном виде, поэтому std::istream_iterator<float> для ваших целей не годится.

С бинарными данными лучше так:
Используется синтаксис C++
std::ifstream fstFile(namefile, std::ios::binary);
fstFile.seekg(sizeHeader, std::ios::beg);
std::vector<float> data;
float temp;
while(fstFile.read((char*)&temp, sizeof(float))) data.push_back(temp);

 
 
 
 Re: C++ загрузка в вектор из бинарного файла
Сообщение13.03.2016, 13:50 
Спасибо, сделал в конце концов также как предложили Вы:

Используется синтаксис C++
std::ifstream fstFile(namefile, std::ios::binary);
fstFile.seekg(sizeHeader, std::ios::beg);
std::vector<float> data(vcount);
fstFile.read((char*) &data[0], vcount * sizeof(float));
 

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group