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

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

Войти
Регистрация
Восстановить пароль
 
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
#1

Работа с бинарным файлом - C++

01.11.2013, 21:20. Просмотров 906. Ответов 19
Метки нет (Все метки)

почему программа не выводит 16-ричный дамп бинарного файла?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
int main () 
{
  streamoff lSize;
  char *buffer;
  
  ifstream File("myfile.bin" , ios::binary);
  if (!File) 
  {
      cerr << "File error"; 
      exit (1);
  }
 
  // получить размер файла:
  File.seekg(0 , ios::end);
  lSize = File.tellg();
  File.seekg(0);
 
  // выделить память для размещения файла:
  buffer = new (nothrow)
      char[lSize];
  if (buffer == NULL) 
  {
      cerr << "File error"; 
      exit (1);
  }
 
  // скопировать файл в буфер:
  File.read(buffer, lSize);
  if (!File) 
  {
      cerr << "Reading error"; 
      exit (3);
  }
  /* весь файл теперь загружается в буфер памяти. */
 
  for (long i = 0; i < lSize; i++)
    cout << hex << (int)buffer[i] << ' ';
  
// завершение
  File.close ();
  free (buffer);
 
  return 0;
}
и как избавиться от этой ошибки: warning C4244: инициализация: преобразование "std::streamoff" в "unsigned int", возможна потеря данных
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2013, 21:20     Работа с бинарным файлом
Посмотрите здесь:

Работа с бинарным файлом - C++
Доброго времени суток всем. Помогите пожалуйста доделать задачу: Создать класс для работы с бинарным файлом. В файл записать...

Работа с бинарным файлом - C++
Всем привет! есть тестовый пример в котором я пытаюсь записать в бинарный файл три переменных, а затем их считать. Все работает нормально...

Работа со структурой и бинарным файлом - C++
Что может быть за ошибка в case 2? struct sport_complex{//Структура struct trainers{ char t_name; char t_surname; char...

Работа с бинарным файлом(Подсчет записей) - C++
void open_bin(l_lib *l, int lines_count) // функция для открытия bin файла { fstream b_file(&quot;data.bin&quot;, ios::binary | ios::in); //...

Выводится одна лишняя строка (работа с бинарным файлом) - C++
Буду благодарен за помощь. #include&lt;iostream&gt; #include &lt;fstream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &lt;cstring&gt; ...

Работа с бинарным файлом (Создать новый текстовый файл, в котором числа будут отсортированы в порядке возрастания.) - C++
Аларм! Срочно прошу помощи! Есть задача: Записать бинарный файл с массивом целых чисел. Создать новый текстовый файл, в котором числа...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.11.2013, 21:30     Работа с бинарным файлом #2
std::streamoff в твоей имплементации длинее int. это как здесь аналогично:

C++
1
2
long l = 9999999;
char ch = l;// то же предупреждение выдаст
да, buffer ты должен delete, not free

Добавлено через 3 минуты
а покажи, что программа выводит.

Добавлено через 23 секунды
и как ты представляешь, что должна бы выводить.
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 21:42  [ТС]     Работа с бинарным файлом #3
Цитата Сообщение от novi4ok Посмотреть сообщение
а покажи, что программа выводит.
ничего не выводит... пусто)
если честно, не особо понимаю, как это должно выглядеть, думаю, какие то значение должно хотя бы показать или хоть какую то надпись
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
01.11.2013, 21:54     Работа с бинарным файлом #4
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
как это должно выглядеть
Стандартно. Вот так, например:

Код
HD 1.0 :  HexDump for file 'p0003.png' [00000000:00000040]

00000000:  89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52  ‰PNG........IHDR
00000010:  00 00 02 EF 00 00 04 00 08 00 00 00 00 74 2A E8  ...п.........t*и
00000020:  E0 00 00 20 00 49 44 41 54 78 DA EC 5D 2B 70 DC  а.. .IDATxЪм]+pЬ
00000030:  CA B6 5D E7 D5 AD 6A 90 19 24 62 0D 12 90 06 19  К¶]зХ*jђ.$b..ђ..
00000040:  64 CE F0 88 4D 95 9E F9 49 D0 21 0E 0B 70 5D F2  dОр€M•ћщIР!..p]т
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:06  [ТС]     Работа с бинарным файлом #5
Цитата Сообщение от novi4ok Посмотреть сообщение
а покажи, что программа выводит.
File error
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:11     Работа с бинарным файлом #6
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
File error
В каком месте кода? В 9 строке или 23? myfile.bin существует и где находится?
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:16  [ТС]     Работа с бинарным файлом #7
в 9
в папке проекта файл не создался
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:17     Работа с бинарным файлом #8
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
в папке проекта файл не создался
И не должен. Это когда для записи открывается, то создаётся, а если для чтения, то должен существовать и находиться в папке проекта (обычно).
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:20  [ТС]     Работа с бинарным файлом #9
Цитата Сообщение от alsav22 Посмотреть сообщение
И не должен.
т.е. мне не нужно создавать файл?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:42     Работа с бинарным файлом #10
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
т.е. мне не нужно создавать файл?
Можно готовый использовать.
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:49  [ТС]     Работа с бинарным файлом #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Можно готовый использовать.
использовал готовый, который имел содержимое: 1234567890
после компиляций вывело: 31 32 33 34 35 36 37 38 39 30
так и должно быть?

P.S. что и где нужно прописать, чтобы компилятор закрывался после нажатия любой клавиши...
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.11.2013, 22:52     Работа с бинарным файлом #12
ну да, это и суть шестнадцатеричные значения этих символов. только тебе нужно было продемонстрировать работу с бинарными файлами, возьми что-нибудь, содержащее байты больше 127, если это - задание. возьми сожми этот же текстовый файл, к примеру, и его используй.
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 23:28  [ТС]     Работа с бинарным файлом #13
Цитата Сообщение от novi4ok Посмотреть сообщение
возьми что-нибудь, содержащее байты больше 127
можете выложите такой для примера?

Добавлено через 9 минут
просто не понял немного...
мне нужно просто связать любой файл, который "весит" больше 127 байт, да?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 23:29     Работа с бинарным файлом #14
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
можете выложите такой для примера?
Возьмите любой не текстовый файл, хотя бы, .exe своего кода (в папке Debug), скопируйте его в папку проекта, и измените ему имя на myfile.bin.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.11.2013, 00:59     Работа с бинарным файлом #15
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
28
29
30
31
32
33
34
#include <iostream>
#include <fstream>
#include <iterator>
#include <iomanip>
 
int main(void)
{
    std::ifstream input_file("file_to_open");
    std::istreambuf_iterator<char> bin_file_iterator(input_file);
    short offset = 0;
    std::string text;
    unsigned char byte;
    std::cout<<std::hex<<std::setfill('0')<<std::setw(5)<<offset<<":  ";;
    while(bin_file_iterator != std::istreambuf_iterator<char>())
    {
        byte = *bin_file_iterator;
        std::cout<<std::setw(2)<<static_cast<int>(byte)<<" ";
        if(byte > 0x7e || byte < 0x20)
            text += '.';
        else
            text += byte;
        ++bin_file_iterator, ++offset;
        if(offset % 16 == 0)
        {
            std::cout<<" |"<<text<<"|"<<std::endl;
            std::cout<<std::setw(5)<<offset<<":  ";
            text.clear();
        }
    }
    while((offset++ % 16) != 0) std::cout<<"   ";
    std::cout<<" |"<<text<<"|"<<std::endl;
    input_file.close();
    return 0;
}
$./a.out | head
Код
00000:  7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  |.ELF............|
00010:  02 00 3e 00 01 00 00 00 78 07 40 00 00 00 00 00  |..>.....x.@.....|
00020:  40 00 00 00 00 00 00 00 50 41 00 00 00 00 00 00  |@.......PA......|
00030:  00 00 00 00 40 00 38 00 09 00 40 00 25 00 22 00  |....@.8...@.%.".|
00040:  06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00  |........@.......|
00050:  40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00  |@.@.....@.@.....|
00060:  f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00  |................|
00070:  08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00  |................|
00080:  38 02 00 00 00 00 00 00 38 02 40 00 00 00 00 00  |8.......8.@.....|
00090:  38 02 40 00 00 00 00 00 1c 00 00 00 00 00 00 00  |8.@.............|
$ ./a.out | tail
Код
054b0:  75 74 40 40 47 4c 49 42 43 58 58 5f 33 2e 34 00  |ut@@GLIBCXX_3.4.|
054c0:  5f 5f 64 73 6f 5f 68 61 6e 64 6c 65 00 5f 5f 6c  |__dso_handle.__l|
054d0:  69 62 63 5f 63 73 75 5f 69 6e 69 74 00 5f 5f 62  |ibc_csu_init.__b|
054e0:  73 73 5f 73 74 61 72 74 00 5f 65 6e 64 00 5f 5a  |ss_start._end._Z|
054f0:  53 74 34 65 6e 64 6c 49 63 53 74 31 31 63 68 61  |St4endlIcSt11cha|
05500:  72 5f 74 72 61 69 74 73 49 63 45 45 52 53 74 31  |r_traitsIcEERSt1|
05510:  33 62 61 73 69 63 5f 6f 73 74 72 65 61 6d 49 54  |3basic_ostreamIT|
05520:  5f 54 30 5f 45 53 36 5f 40 40 47 4c 49 42 43 58  |_T0_ES6_@@GLIBCX|
05530:  58 5f 33 2e 34 00 5f 65 64 61 74 61 00 6d 61 69  |X_3.4._edata.mai|
05540:  6e 00 5f 69 6e 69 74 00                          |n._init.|
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
02.11.2013, 01:51     Работа с бинарным файлом #16
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
можете выложите такой для примера?

Добавлено через 9 минут
просто не понял немного...
мне нужно просто связать любой файл, который "весит" больше 127 байт, да?
нет. я неправильно написал. ты взял для примера чисто текстовый файл. не нужен длинный файл, но возьми что-нибудь, содержащее байты, не представляемые символами.
Margus
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 9
12.11.2013, 02:20     Работа с бинарным файлом #17
Vourhey,
Как можно вывести в текстовый файл символы, которые в выводе указаны в HEX, т.е. чтобы содержимое текстового файла было следующим:
75 74 40 40 47 4c 49 42 43 58 58 5f 33 2e 34 00
5f 5f 64 73 6f 5f 68 61 6e 64 6c 65 00 5f 5f 6c
...
6e 00 5f 69 6e 69 74 00

?
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
12.11.2013, 03:22     Работа с бинарным файлом #18
Margus, измени код, чтобы он генерировал вывод такой, какой тебе нужен, и сделай перенаправление вывода программы в файл.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
12.11.2013, 03:22     Работа с бинарным файлом #19
Держите.
Миниатюры
Работа с бинарным файлом  
Вложения
Тип файла: 7z test.bin.7z (242 байт, 8 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2013, 12:15     Работа с бинарным файлом
Еще ссылки по теме:

задача с бинарным файлом - C++
Помогите, пожалуйста, написать на C++. Нужно создать бинарный файл f и записать в него целые числа. Организовать просмотр бинарного файла...

Проблемы с бинарным файлом - C++
Приветствую. Проблема заключается в следующем: не хочет открываться бинарный файл. #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include...

Помогите с бинарным файлом - C++
Есть задачка звучит так: Вы являетесь владельцем склада металлических изделий и нуждаетесь в инвентаризации, которая сказала бы вам,...

Вынести часть кода работы с бинарным файлом в отдельную функцию - C++
Хочу написать функцию:void case_ofstream(); в case 1. Как она должна выглядеть? #include&lt;iostream&gt; #include&lt;fstream&gt; using...


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

Или воспользуйтесь поиском по форуму:
Margus
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 9
12.11.2013, 12:15     Работа с бинарным файлом #20
Что в коде изменить нужно, чтобы это получить?
Yandex
Объявления
12.11.2013, 12:15     Работа с бинарным файлом
Ответ Создать тему
Опции темы

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