Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Светла
3 / 3 / 0
Регистрация: 22.03.2012
Сообщений: 15
#1

Заполнение вектора функцией copy из бинарного файла - C++

10.10.2012, 23:28. Просмотров 541. Ответов 2
Метки нет (Все метки)

Здравствуйте!
Есть бинарный файл с таким содержимым:
10 01 C0 00 00 58 01 01 00 01 00 06 03 00 00 00
00 00 00 00 38 01 00 00 00 00 00 00 00 39 01 00
01 00 00 00 00 00 45 01 00 0A 00 00 00 00 00 49
01 00 00 00 00 00 00 00 4D 04 00 00 00 00 00 00
00 38 01 A4 04 00 08 00 04 00 00 00 1E FF FF A4 
10 00 00 A4 11 01 00 A4 13 00 00 00 00 06 95

Пишу код:
C++
1
2
3
4
5
6
7
8
9
10
11
  ifstream in;
  in.open((OD_LoadCyclo->FileName).c_str(),ios::binary);
  if(!in)
  {
    ShowMessage("File is not open!");
    return;
  }
in.setf(ios::hex,ios::basefield);
vector<unsigned char> vec;
 
copy(istream_iterator<unsigned char>(in), istream_iterator<unsigned char>(), back_inserter(vec));
Вместо 95 байт, считывается 94 и теряется символ "0A" в третьей строке:
01 00 00 00 00 00 45 01 00 0A 00 00 00 00 00 49

Подскажите пожалуйста, что я делаю не так? Или что я могла не дописать?
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2012, 23:28     Заполнение вектора функцией copy из бинарного файла
Посмотрите здесь:

C++ Рекурсия,заполнение массива рекурсивной функцией.
Написать аналог процедуры Insert. Процедурой Delete и функцией Copy не пользоваться C++
C++ Заполнение массива с клавы, и подсчет суммы элементов с функцией
Копирование части вектора в другой вектор по условию, функцией copy_if C++
C++ Разобраться с рекурсивной функцией обхода бинарного дерева
C++ Заполнение вектора из файла
Заполнение бинарного дерева из файла C++
Заполнение вектора в цикле C++
Заполнение динамического массива структур из бинарного файла C++
Заполнение особого бинарного дерева C++
Распределение элементов вектора внизу бинарного дерева C++
Заполнение бинарного файла структурой и вывод его на экран C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1634 / 1262 / 128
Регистрация: 21.12.2010
Сообщений: 1,924
Записей в блоге: 7
11.10.2012, 01:16     Заполнение вектора функцией copy из бинарного файла #2
0x0A есть код перевода строки '\n', надо выставить флаг noskipws
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <vector>
 
typedef unsigned char uchar;
 
int main()
{
    std::fstream fs("in.txt", std::ios::in | std::ios::binary);
    if(fs)
    {
        std::vector<uchar> v;
        std::ios_base::fmtflags ff;
        ff = fs.flags();
        ff &= ~fs.skipws;
        fs.flags(ff);
        std::copy((std::istream_iterator<uchar>(fs)), std::istream_iterator<uchar>(), std::back_inserter(v));
        std::cout << v.size() << std::endl;
        for(auto val : v)
            std::cout << std::hex << int(val) << " ";
        fs.close();
    }
    else std::cerr << "Unable to open file" << std::endl;
    return 0;
}
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.10.2012, 04:33     Заполнение вектора функцией copy из бинарного файла #3
можно без алгоритма копирования обойтись.
у контейнеров есть интервальные конструкторы:
C++
1
2
 ifstream inputFile("...", ios::in | ios::binary );
 vector<char> filedata( ( istreambuf_iterator<char>( inputFile ) ),  istreambuf_iterator<char>() );
Yandex
Объявления
11.10.2012, 04:33     Заполнение вектора функцией copy из бинарного файла
Ответ Создать тему
Опции темы

Текущее время: 01:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru