Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
defer
秘密
558 / 238 / 16
Регистрация: 29.11.2010
Сообщений: 797
#1

Чтение бинарных файлов - C++

24.04.2012, 10:44. Просмотров 763. Ответов 1
Метки нет (Все метки)

Как прочитать бинарный файл начиная с пятого байта до конца?

и как потом это прочитанное записать в другой файл?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2012, 10:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение бинарных файлов (C++):

Чтение бинарных файлов
Здравствуйте уважаемые эксперты,хотелось бы узнать как можно прочитать...

Чтение бинарных файлов
посчитать количество байт между первым 0A и FF?

Чтение бинарных файлов по байтам
Есть бинарный файл, который состоит из большого числа разновидной информации...

Запись и чтение бинарных файлов. Программа крашится при закрытии консольного окна
Имеется задачка: Написать программу которая будет записывать бинарные данные в...

Чтение бинарных данных из файла
# include <iostream> # include <vector> # include <fstream> using...

О кодировке бинарных файлов
Здравствуйте;Тут такая проблема:Как заполнять бинарные файлы? Просто я если...

1
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
24.04.2012, 11:09 #2
Лучший ответ Сообщение было отмечено defer как решение

Решение

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 <vector>
 
int main()
{
   const std::streampos offset = 5;
   std::ifstream ifs("test_file", std::ios::binary);
   if (!ifs)
   {
      std::cerr << "No file" << std::endl;
      return 1;
   }
   ifs.seekg(0, std::ios::end);
   std::streampos length = ifs.tellg();
   ifs.seekg(0, std::ios::beg);
   if (length > offset)
   {
      ifs.seekg(offset);
      std::vector<char> bin_content(length - offset);
      ifs.read((char*)&bin_content[0], bin_content.size());
      std::ofstream ofs("res_file", std::ios::binary);
      ofs.write((char*)&bin_content[0], bin_content.size());
      ofs.close();
   }
   ifs.close();
}
Bash
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
forever@pterois:~/My_pro1/cpp_pro$ hd test_file 
00000000  7f 45 4c 46 01 01 01 03  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 03 00 01 00 00 00  e2 94 94 e2 95 9e 04 08  |................|
00000020  34 00 00 00 3c 04 04 00  00 00 00 00 34 00 20 00  |4...<.......4. .|
00000030  09 00 28 00 20 00 1d 00  06 00 00 00 34 00 00 00  |..(. .......4...|
00000040  34 d0 90 04 08 34 d0 90  04 08 20 01 00 00 20 01  |4....4.... ... .|
00000050  00 00 05 00 00 00 04 00  00 00 03 00 00 00 54 01  |..............T.|
00000060  00 00 54 d0 91 04 08 54  d0 91 04 08 13 00 00 00  |..T....T........|
00000070  13 00 00 00 04 00 00 00  01 00 00 00 01 00 00 00  |................|
00000080  00 00 00 00 00 d0 90 04  08 00 d0 90 04 08 18 c2  |................|
00000090  a4 03 00 18 c2 a4 03 00  05 00 00 00 00 10 00 00  |................|
000000a0  01 00 00 00 e2 95 aa e2  96 a0 03 00 e2 95 aa d0  |................|
000000b0  9e 08 08 e2 95 aa d0 9e  08 08 20 04 00 00 e2 95  |.......... .....|
000000c0  95 06 00 00 06 00 00 00  00 10 00 00 02 00 00 00  |................|
000000d0  d0 81 e2 96 a0 03 00 d0  81 d0 9e 08 08 d0 81 d0  |................|
000000e0  9e 08 08 00 01 00 00 00  01 00 00 06 00 00 00 04  |................|
000000f0  00 00 00 04 00 00 00 68  01 00 00 68 d0 91 04 08  |.......h...h....|
00000100  68 d0 91 04 08 44 00 00  00 44 00 00 00 04 00 00  |h....D...D......|
00000110  00 04 00 00 00 50 d1 85  74 64 6c e2 94 94 02 00  |.....P..tdl.....|
00000120  6c 40 07 08 6c 40 07 08  4c 37 00 00 4c 37 00 00  |l@..l@..L7..L7..|
00000130  04 00 00 00 04 00 00 00  51 d1 85 74 64 00 00 00  |........Q..td...|
00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000150  00 06 00 00 00 04 00 00  00 52 d1 85 74 64 e2 95  |.........R..td..|
00000160  aa e2 96 a0 03 00 e2 95  aa d0 9e 08 08 e2 95 aa  |................|
00000170  d0 9e 08 08 28 01 00 00  28 01 00 00 04 00 00 00  |....(...(.......|
00000180  01 00 00 00 2f 6c 69 62  2f 6c 64 2d 6c 69 6e 75  |..../lib/ld-linu|
00000190  78 2e 73 6f 2e 32 0a                              |x.so.2.|
00000197
forever@pterois:~/My_pro1/cpp_pro$ ./new 
forever@pterois:~/My_pro1/cpp_pro$ hd res_file 
00000000  01 01 03 00 00 00 00 00  00 00 00 02 00 03 00 01  |................|
00000010  00 00 00 e2 94 94 e2 95  9e 04 08 34 00 00 00 3c  |...........4...<|
00000020  04 04 00 00 00 00 00 34  00 20 00 09 00 28 00 20  |.......4. ...(. |
00000030  00 1d 00 06 00 00 00 34  00 00 00 34 d0 90 04 08  |.......4...4....|
00000040  34 d0 90 04 08 20 01 00  00 20 01 00 00 05 00 00  |4.... ... ......|
00000050  00 04 00 00 00 03 00 00  00 54 01 00 00 54 d0 91  |.........T...T..|
00000060  04 08 54 d0 91 04 08 13  00 00 00 13 00 00 00 04  |..T.............|
00000070  00 00 00 01 00 00 00 01  00 00 00 00 00 00 00 00  |................|
00000080  d0 90 04 08 00 d0 90 04  08 18 c2 a4 03 00 18 c2  |................|
00000090  a4 03 00 05 00 00 00 00  10 00 00 01 00 00 00 e2  |................|
000000a0  95 aa e2 96 a0 03 00 e2  95 aa d0 9e 08 08 e2 95  |................|
000000b0  aa d0 9e 08 08 20 04 00  00 e2 95 95 06 00 00 06  |..... ..........|
000000c0  00 00 00 00 10 00 00 02  00 00 00 d0 81 e2 96 a0  |................|
000000d0  03 00 d0 81 d0 9e 08 08  d0 81 d0 9e 08 08 00 01  |................|
000000e0  00 00 00 01 00 00 06 00  00 00 04 00 00 00 04 00  |................|
000000f0  00 00 68 01 00 00 68 d0  91 04 08 68 d0 91 04 08  |..h...h....h....|
00000100  44 00 00 00 44 00 00 00  04 00 00 00 04 00 00 00  |D...D...........|
00000110  50 d1 85 74 64 6c e2 94  94 02 00 6c 40 07 08 6c  |P..tdl.....l@..l|
00000120  40 07 08 4c 37 00 00 4c  37 00 00 04 00 00 00 04  |@..L7..L7.......|
00000130  00 00 00 51 d1 85 74 64  00 00 00 00 00 00 00 00  |...Q..td........|
00000140  00 00 00 00 00 00 00 00  00 00 00 00 06 00 00 00  |................|
00000150  04 00 00 00 52 d1 85 74  64 e2 95 aa e2 96 a0 03  |....R..td.......|
00000160  00 e2 95 aa d0 9e 08 08  e2 95 aa d0 9e 08 08 28  |...............(|
00000170  01 00 00 28 01 00 00 04  00 00 00 01 00 00 00 2f  |...(.........../|
00000180  6c 69 62 2f 6c 64 2d 6c  69 6e 75 78 2e 73 6f 2e  |lib/ld-linux.so.|
00000190  32 0a                                             |2.|
00000192
Добавлено через 5 минут
Или так если считать байты с 1.

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 <vector>
 
int main()
{
   const std::streampos offset = 5;
   std::ifstream ifs("test_file", std::ios::binary);
   if (!ifs)
   {
      std::cerr << "No file" << std::endl;
      return 1;
   }
   ifs.seekg(0, std::ios::end);
   std::streampos length = ifs.tellg();
   ifs.seekg(0, std::ios::beg);
   if (length > offset)
   {
      ifs.seekg(offset - std::streampos(1));
      std::vector<char> bin_content(length - offset + 1);
      ifs.read((char*)&bin_content[0], bin_content.size());
      std::ofstream ofs("res_file", std::ios::binary);
      ofs.write((char*)&bin_content[0], bin_content.size());
      ofs.close();
   }
   ifs.close();
}
Bash
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
28
forever@pterois:~/My_pro1/cpp_pro$ hd res_file 
00000000  01 01 01 03 00 00 00 00  00 00 00 00 02 00 03 00  |................|
00000010  01 00 00 00 e2 94 94 e2  95 9e 04 08 34 00 00 00  |............4...|
00000020  3c 04 04 00 00 00 00 00  34 00 20 00 09 00 28 00  |<.......4. ...(.|
00000030  20 00 1d 00 06 00 00 00  34 00 00 00 34 d0 90 04  | .......4...4...|
00000040  08 34 d0 90 04 08 20 01  00 00 20 01 00 00 05 00  |.4.... ... .....|
00000050  00 00 04 00 00 00 03 00  00 00 54 01 00 00 54 d0  |..........T...T.|
00000060  91 04 08 54 d0 91 04 08  13 00 00 00 13 00 00 00  |...T............|
00000070  04 00 00 00 01 00 00 00  01 00 00 00 00 00 00 00  |................|
00000080  00 d0 90 04 08 00 d0 90  04 08 18 c2 a4 03 00 18  |................|
00000090  c2 a4 03 00 05 00 00 00  00 10 00 00 01 00 00 00  |................|
000000a0  e2 95 aa e2 96 a0 03 00  e2 95 aa d0 9e 08 08 e2  |................|
000000b0  95 aa d0 9e 08 08 20 04  00 00 e2 95 95 06 00 00  |...... .........|
000000c0  06 00 00 00 00 10 00 00  02 00 00 00 d0 81 e2 96  |................|
000000d0  a0 03 00 d0 81 d0 9e 08  08 d0 81 d0 9e 08 08 00  |................|
000000e0  01 00 00 00 01 00 00 06  00 00 00 04 00 00 00 04  |................|
000000f0  00 00 00 68 01 00 00 68  d0 91 04 08 68 d0 91 04  |...h...h....h...|
00000100  08 44 00 00 00 44 00 00  00 04 00 00 00 04 00 00  |.D...D..........|
00000110  00 50 d1 85 74 64 6c e2  94 94 02 00 6c 40 07 08  |.P..tdl.....l@..|
00000120  6c 40 07 08 4c 37 00 00  4c 37 00 00 04 00 00 00  |l@..L7..L7......|
00000130  04 00 00 00 51 d1 85 74  64 00 00 00 00 00 00 00  |....Q..td.......|
00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 06 00 00  |................|
00000150  00 04 00 00 00 52 d1 85  74 64 e2 95 aa e2 96 a0  |.....R..td......|
00000160  03 00 e2 95 aa d0 9e 08  08 e2 95 aa d0 9e 08 08  |................|
00000170  28 01 00 00 28 01 00 00  04 00 00 00 01 00 00 00  |(...(...........|
00000180  2f 6c 69 62 2f 6c 64 2d  6c 69 6e 75 78 2e 73 6f  |/lib/ld-linux.so|
00000190  2e 32 0a                                          |.2.|
00000193
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 11:09
Привет! Вот еще темы с решениями:

Запись бинарных файлов
открываю в hex-редакторе бинарный файл, там написано 41 54 26 54 вопрос как...

Объединение двух бинарных файлов
Как сделать программу которая считывает числа (упорядоченные по возрастанию) из...

Счёт последовательностей бинарных файлов
Написал программу, которая конвертирует текстовый файл в бинарный, считывает из...

Записать данные двух бинарных файлов в один
Здравствуйте, столкнулся с проблемой. Нужно записать значения двух бинарных...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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