2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
1

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

01.11.2013, 21:20. Показов 2053. Ответов 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", возможна потеря данных
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2013, 21:20
Ответы с готовыми решениями:

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

Работа с бинарным файлом
Можно ли из бинарного файла выписывать строки?

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

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

19
555 / 509 / 25
Регистрация: 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 секунды
и как ты представляешь, что должна бы выводить.
1
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 21:42  [ТС] 3
Цитата Сообщение от novi4ok Посмотреть сообщение
а покажи, что программа выводит.
ничего не выводит... пусто)
если честно, не особо понимаю, как это должно выглядеть, думаю, какие то значение должно хотя бы показать или хоть какую то надпись
0
3174 / 1933 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 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]т
0
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:06  [ТС] 5
Цитата Сообщение от novi4ok Посмотреть сообщение
а покажи, что программа выводит.
File error
0
5493 / 4888 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:11 6
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
File error
В каком месте кода? В 9 строке или 23? myfile.bin существует и где находится?
0
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:16  [ТС] 7
в 9
в папке проекта файл не создался
0
5493 / 4888 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:17 8
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
в папке проекта файл не создался
И не должен. Это когда для записи открывается, то создаётся, а если для чтения, то должен существовать и находиться в папке проекта (обычно).
0
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:20  [ТС] 9
Цитата Сообщение от alsav22 Посмотреть сообщение
И не должен.
т.е. мне не нужно создавать файл?
0
5493 / 4888 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 22:42 10
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
т.е. мне не нужно создавать файл?
Можно готовый использовать.
1
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
01.11.2013, 22:49  [ТС] 11
Цитата Сообщение от alsav22 Посмотреть сообщение
Можно готовый использовать.
использовал готовый, который имел содержимое: 1234567890
после компиляций вывело: 31 32 33 34 35 36 37 38 39 30
так и должно быть?

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

Добавлено через 9 минут
просто не понял немного...
мне нужно просто связать любой файл, который "весит" больше 127 байт, да?
0
5493 / 4888 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 23:29 14
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
можете выложите такой для примера?
Возьмите любой не текстовый файл, хотя бы, .exe своего кода (в папке Debug), скопируйте его в папку проекта, и измените ему имя на myfile.bin.
1
Почетный модератор
7388 / 2634 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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.|
2
555 / 509 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
02.11.2013, 01:51 16
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
можете выложите такой для примера?

Добавлено через 9 минут
просто не понял немного...
мне нужно просто связать любой файл, который "весит" больше 127 байт, да?
нет. я неправильно написал. ты взял для примера чисто текстовый файл. не нужен длинный файл, но возьми что-нибудь, содержащее байты, не представляемые символами.
1
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

?
0
Почетный модератор
7388 / 2634 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
12.11.2013, 03:22 18
Margus, измени код, чтобы он генерировал вывод такой, какой тебе нужен, и сделай перенаправление вывода программы в файл.
0
3174 / 1933 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
12.11.2013, 03:22 19
Держите.
Миниатюры
Работа с бинарным файлом  
Вложения
Тип файла: 7z test.bin.7z (242 байт, 11 просмотров)
0
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 9
12.11.2013, 12:15 20
Что в коде изменить нужно, чтобы это получить?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2013, 12:15
Помогаю со студенческими работами здесь

Работа с бинарным файлом(Подсчет записей)
void open_bin(l_lib *l, int lines_count) // функция для открытия bin файла { fstream...

Работа с бинарным файлом и массив структур
Задание следующее: В компании одному номеру соответствует одно помещение, в помещении до 5...

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru