1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Запись динамической структуры в файл

Тема в разделе "С и С++", создана пользователем korish, 5 янв 2011.

Статус темы:
Закрыта.
  1. korish

    korish Гость

    Репутация:
    0
    Имеется программа, описанная ниже. Программа записывает структуру, которая формируется динамически в файл, а затем считывает из файла. Хочу убедиться что в файл записалось то что я водил в структуру, однако при открытии бинарного файла в редакторе (okteta), не могу разобрать что там к чему. Например при запуске программы ввожу число интервалов = 1 и количество сигналов тоже =1. По идее в файле должно находиться 2 32-битных слова (1 и 1). Первое слово записано правильно,
    00000001 00000000 00000000 00000000
    А вот со вторым не понятно:
    00110000 11000000 00111010 00001001.
    Я так понимаю что вектор записывается как-то своеобразно. Помогите разобраться.
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Код программы"</div></div><div class="sp-body"><div class="sp-content">
    Код:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
    #include <bits/types.h>//adds __u32 and other
    #include <asm/types.h>
    #include <vector>
    #include <iostream>
    using std::vector;
    using std::cin;
    using std::cout;
    
    typedef struct {
    __u32	nn;
    } t_str2;
    
    typedef struct {
    __u32	n;
    vector<t_str2> s2;
    } t_str1;
    
    int main()
    {
    int kol_int;
    t_str1 str1;
    
    cout<<"Enter kol intervalov:";
    cin>>kol_int;
    
    str1.s2.resize(kol_int);
    str1.n=kol_int;
    
    for(int i=0;i<str1.n;i++)
    {
    int kol_sig;
    printf("Enter kolvo signalov na intervale[%d]:\n",i);
    cin>>kol_sig;
    str1.s2[i].nn=kol_sig;
    }
    cout<<"\nstr1_n="<<str1.n;
    for(int i=0;i<str1.n;i++)
    {
    cout<<"\nKoli4estvo signalov="<<str1.s2[i].nn;
    }
    //Вычисление размера сформированной структуры
    int sz=sizeof(__u32)*1;
    sz+=sizeof(__u32)*str1.n;
    
    //Запись структуры в бинарный файл
    FILE *fb;
    fb = fopen("file.txt", "wb");
    if((fb=fopen("file.txt","wb"))!=NULL)
    {
    fwrite(&str1, sz,1, fb);
    }
    else
    printf("Can't be opened\n");
    fclose(fb);
    vector<t_str2> s2;
    
    //Чтение структуры из бинарного файла
    int p1;
    t_str1 *t1;
    
    if((p1=open("file.txt", O_RDONLY))==0) return 0;
    char buffer[sz];
    read(p1, buffer, sz);
    close(p1);
    memset(t1,0,sz);	
    t1=(t_str1*)buffer;
    
    //Прочитанная структура
    cout<<"\n\nStructure from binary file\n";
    cout<<"\nstr2_n="<<t1->n;
    for(int i=0;i<t1->n;i++)
    {
    cout<<"\nKoli4estvo signalov="<<t1->s2[i].nn;
    }
    
    return (0);
    }
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей