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

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

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

    korish Гость

    Имеется программа, описанная ниже. Программа записывает структуру, которая формируется динамически в файл, а затем считывает из файла. Хочу убедиться что в файл записалось то что я водил в структуру, однако при открытии бинарного файла в редакторе (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">
    Код (C++):
    #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);
    }
     
Загрузка...
Статус темы:
Закрыта.

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