Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

01.11.2013, 21:20. Просмотров 994. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2013, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с бинарным файлом (C++):

Работа с бинарным файлом - 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++
Аларм! Срочно прошу помощи! Есть задача: Записать бинарный файл с массивом целых чисел. Создать новый текстовый файл, в котором числа...

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

Добавлено через 9 минут
просто не понял немного...
мне нужно просто связать любой файл, который "весит" больше 127 байт, да?
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2013, 23:29 #14
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
можете выложите такой для примера?
Возьмите любой не текстовый файл, хотя бы, .exe своего кода (в папке Debug), скопируйте его в папку проекта, и измените ему имя на myfile.bin.
1
Vourhey
Почетный модератор
6487 / 2261 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
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
02.11.2013, 00:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 00:59
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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