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

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

Войти
Регистрация
Восстановить пароль
 
Lifebinder
6 / 6 / 0
Регистрация: 04.10.2009
Сообщений: 100
#1

Считывание из бинарника - C++

23.07.2011, 00:32. Просмотров 596. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
        FILE* fl=fopen((ExtractFilePath(ParamStr(0))+r_buf[0]+".bin").c_str(), "w");
 
        char* l=r_buf[1].c_str();
        WORD l1=strlen(l);
        fwrite(&l1,2,1,fl);
        for (int i=0; i<strlen(l); i++)
          fwrite(&l[i],1,1,fl);   
               
        fclose(fl);
тут проблем нет.

при считывании первое число в 2 байта считывается нормально, а текст обращается в число и программа вылетает с ошибкой, ссылаясь на строку fclose(fl); .
что не так? туплю
C++
1
2
3
4
5
6
7
        FILE* fl=fopen((ExtractFilePath(ParamStr(0))+r_buf[0]+".bin").c_str(), "r");
        WORD l; WORD a;
        fread(&l,2,1,fl);
        cout << l << endl;
        fread(&a,(int)l,1,fl);
        cout << a << endl;
        fclose(fl);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2011, 00:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание из бинарника (C++):

Чтение бинарника по биту - C++
Всем привет! Уважаемые, помогите пожалуйста! Есть бинарный файл. Из него надо получить число, закодированное, например, в старших трех...

Компиляция бинарника на gcc - C++
Задача: нужно скомпилировать сырой бинарник на gcc. Он будет грузиться по адресу 0x10000 и туда же будет передаваться управление. И мне...

Чтение бинарника fortran в C++ - C++
Добрый день, кодер я начинающий поэтому даже приблизительно не знаю как реализовать следующую функцию. В общем есть бинарник fortran,...

Восстановление списка из бинарника - C++
Есть 2 функции bool SaveToFile(char* FileName, void** ArrRestourant) {TFile f; if ((f = fopen(FileName, &quot;wb&quot;)) == NULL){return...

Запись/чтение нуля из бинарника - C++
Здравствуйте! Такая проблема обозначилась: есть некоторая переменная типа unsigned int tt, которая на каждом шаге цикла должна...

Чтение нескольких байт из бинарника - C++
Цель задания: написать программу, использующую сведения о формате файла и выводящую информацию об обрабатываемом файле. Ну вот я...

5
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,008
23.07.2011, 00:43 #2
Цитата Сообщение от Lifebinder Посмотреть сообщение
а текст обращается в число
Так где же текст, если
C
1
WORD a;
Это же целочисленная переменная.
C
1
fread(&a,(int)l,1,fl);
В одну переменную считывается сразу l байт, где l больше размера переменной. Переменная a должна быть символьным массивом?
И букву l в названиях переменных никто не использует.
0
Lifebinder
6 / 6 / 0
Регистрация: 04.10.2009
Сообщений: 100
23.07.2011, 00:51  [ТС] #3
Опять я,дурак, с этим своим любимым WORD напутал все.
Заменил
C++
1
WORD a
на
C++
1
char a[40];
Удалите тему
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
23.07.2011, 01:07 #4
Lifebinder, вот посмотри прмер написал как работать с бинарными файлами.
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
45
46
47
48
49
#include <windows.h>
#include <stdio.h>
#include <string.h>
 
 
 
int main(void) {
 
    char str[]  = "tasklist /m";
 
    FILE*  fp   = fopen("data.bin", "wb");
 
    WORD len  = (WORD) strlen(str);
    fwrite(&len, sizeof(WORD), 1U, fp);  // записать размер строки
 
 /*
    for(const char* iter = str; *iter; *iter++)    // запись по-байтно долго
        fwrite( &(*iter), 1U, 1U, fp);
 */
 
    fwrite(str, len, 1U, fp);    // запись всем блоком-строки быстро
 
    fflush(fp);   // сбрасываем буфер на диск
    fclose(fp);
 
 
 
    len = 0;
    fp  = fopen("data.bin", "rb");
    fread(&len, sizeof(WORD), 1U, fp);   // читаем размер строки
 
  /*  char ch;
    while(fread(&ch, 1U, 1U, fp)) { // дальше можно по-байтно долго,ведь у нас есть размер строки 
         fputc(ch, stdout);
    } */
 
    char* istr = new char[ len ];   // выделяем память с размером строки
    fread(istr, len, 1u, fp);          // читаем её
    fclose(fp);
 
    puts(istr);   // выводим в консоль
 
 
    delete[] istr;   // по-завершению удалим
    istr = NULL;
 
    getchar();
    return 0;
}
0
grizlik78
23.07.2011, 01:07
  #5

Не по теме:

Цитата Сообщение от Lifebinder Посмотреть сообщение
Удалите тему
И форум. Форум тоже удалите!
Шутка.

0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,777
23.07.2011, 02:32 #6
Цитата Сообщение от xAtom Посмотреть сообщение
прмер написал как работать с бинарными файлами.
1. Учитывая, что размер файла на диске всё равно будет, как минимум, равен блоку (как правило, 512 байт), есть смысл так заморачиваться с записью/чтением размера строки, или лучше всё-таки писать/читать буфер достаточного размера?
2. Если уж писать "как надо", то каждую операцию с файлом (открытие, чтение/запись, закрытие) нужно проверять на предмет возникновения ошибок.
3. Ну и смешение С и С++ стиля тоже считается порочной практикой (это я про new/delete в программе вроде бы на С...)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2011, 02:32
Привет! Вот еще темы с ответами:

Чтение 16-и битных слов из бинарника (загрузка Wav) - C++
Привет! Загружаю WAV. Данные в файле для формата звуковых данных с дискретностью 16 бит монофонического сигнала хранятся в массиве...

Заменить считывание с клавиатуры на считывание из файла - C++
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что делать. Почитал в интернете, попробовал, не...

Запуск бинарника - Ruby
Такой вопрос может кто сталкивался: Есть файл исполняемый. Его надо запустить, но exec('./dever') не пашет, точнее он запускает...

Вызов бинарника - PHP
Как вызвать исполняемый файл в php(linux)? system(), exec() - не канает.


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
23.07.2011, 02:32
Ответ Создать тему
Опции темы

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