2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 C++ загрузка в вектор из бинарного файла
Сообщение10.03.2016, 12:35 


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

 Профиль  
                  
 
 Re: C++ загрузка в вектор из бинарного файла
Сообщение10.03.2016, 13:33 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Ну так прочитайте сначала шапку, а только потом создавайте std::istream_iterator<float>.

 Профиль  
                  
 
 Re: C++ загрузка в вектор из бинарного файла
Сообщение12.03.2016, 19:07 


06/05/15
10
У меня не работает следующий код:
Используется синтаксис 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 
Заслуженный участник
Аватара пользователя


19/12/10
1546
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 


06/05/15
10
Спасибо, сделал в конце концов также как предложили Вы:

Используется синтаксис 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 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group