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

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

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

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

10.10.2012, 23:28. Просмотров 548. Ответов 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++
Есть задание. Используя классы , создать бинарное дерево. +готово, но пока через структуру-потом поправлю В узлах бинарного дерева...

Заполнение вектора из файла - C++
Ребята, подскажите, как считать из файла числа типа double в вектор и вывести на экран? А также потом записать в файл?

Написать аналог процедуры Insert. Процедурой Delete и функцией Copy не пользоваться - C++
Добрый день. Помогите пожалуйста решить 2 задачи 1. Написать аналог процедуры Insert. Процедурой Delete и функцией Copy не пользоваться.

Распределение элементов вектора внизу бинарного дерева - C++
Здравствуйте У меня такое задание : Дан вектор неопределенной длины (числа). Нужно сделать бинарное дерево, что бы самый нижний...

Заполнение особого бинарного дерева - C++
Собственно класс бинарного дерева я прописал (хоть и криво, не в этом дело). Но метод вставки не подходит к поставленной задачи. А именно:...

Заполнение массива рекурсивной функцией - C++
привет! рекурсия....это хуже всего!!! (( А рекурсивная функция, которая заполняет массив целых чисел значениями, вводимыми пользователем,...

Копирование части вектора в другой вектор по условию, функцией copy_if - C++
Добрый день. Есть вектор структуры. Нужно сделать копию вектора по условию. Можно конечно в цикле перебирать элементы и сравнивать и...

Заполнение массива с клавы, и подсчет суммы элементов с функцией - C++
#include &lt;iostream&gt; using namespace std; int sum(int arr , int size) { int rezult = 0; for (int i = 0; i &lt; size; i++) ...

Заполнение вектора в цикле - C++
Попробовал так (для освоения материала) #include &lt;vcl.h&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; //sort ...

заполнение вектора по модулю - C++
Заполняет вектор по модулю 2: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; int main() { ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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
1482 / 1058 / 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>() );
Ответ Создать тему
Опции темы

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