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

  • Автор темы korish
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

korish

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