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

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

Восстановить пароль Регистрация
 
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 21:20     работа с бинарным файлом #1
почему программа не выводит 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", возможна потеря данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 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
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 21:42  [ТС]     работа с бинарным файлом #3
Цитата Сообщение от novi4ok Посмотреть сообщение
а покажи, что программа выводит.
ничего не выводит... пусто)
если честно, не особо понимаю, как это должно выглядеть, думаю, какие то значение должно хотя бы показать или хоть какую то надпись
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 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
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:06  [ТС]     работа с бинарным файлом #5
Цитата Сообщение от novi4ok Посмотреть сообщение
а покажи, что программа выводит.
File error
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:11     работа с бинарным файлом #6
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
File error
В каком месте кода? В 9 строке или 23? myfile.bin существует и где находится?
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:16  [ТС]     работа с бинарным файлом #7
в 9
в папке проекта файл не создался
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:17     работа с бинарным файлом #8
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
в папке проекта файл не создался
И не должен. Это когда для записи открывается, то создаётся, а если для чтения, то должен существовать и находиться в папке проекта (обычно).
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:20  [ТС]     работа с бинарным файлом #9
Цитата Сообщение от alsav22 Посмотреть сообщение
И не должен.
т.е. мне не нужно создавать файл?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:42     работа с бинарным файлом #10
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
т.е. мне не нужно создавать файл?
Можно готовый использовать.
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
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.11.2013, 22:52     работа с бинарным файлом #12
ну да, это и суть шестнадцатеричные значения этих символов. только тебе нужно было продемонстрировать работу с бинарными файлами, возьми что-нибудь, содержащее байты больше 127, если это - задание. возьми сожми этот же текстовый файл, к примеру, и его используй.
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 23:28  [ТС]     работа с бинарным файлом #13
Цитата Сообщение от novi4ok Посмотреть сообщение
возьми что-нибудь, содержащее байты больше 127
можете выложите такой для примера?

Добавлено через 9 минут
просто не понял немного...
мне нужно просто связать любой файл, который "весит" больше 127 байт, да?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 23:29     работа с бинарным файлом #14
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
можете выложите такой для примера?
Возьмите любой не текстовый файл, хотя бы, .exe своего кода (в папке Debug), скопируйте его в папку проекта, и измените ему имя на myfile.bin.
Vourhey
Почетный модератор
6468 / 2243 / 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
549 / 502 / 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
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
12.11.2013, 03:22     работа с бинарным файлом #18
Margus, измени код, чтобы он генерировал вывод такой, какой тебе нужен, и сделай перенаправление вывода программы в файл.
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 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++
Работа с бинарным файлом(Подсчет записей) C++

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

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

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