[ marko.marezz @ 24.08.2010. 15:21 ] @
Imam problem sa citanjem binarnih podataka i funkcijom fread. binarni fajl koji citam je mesavina mnogo tipova podataka koji su predstavljeni u binarnom obliku. naime podaci idu na primer ovako: unsigned short unsigned short double double unsigned char i tako dalje (bez praznina,znaci podatak ide odmah za podatkom) i sad ja lepo znaci treba da ucitam ceo taj binarni fajl u neku promenljivu,zatim da se pozicioniram sa fseek na neko mesto u datoteci, a onda sa fread da procitam izabrani tip podatka. evo ga i moj kod koji sam pisao: Code: FILE* f = fopen("ac12_003.log", "rb"); rewind (f); fseek(f,pos[0]+4,SEEK_SET); unsigned short foo; fread(&foo,1,sizeof(foo),f); printf("%u\n",foo); /*ovaj deo koda brlja i ne daje prave vrednosti. treba da dobijem 3600 umesto 4110*/ unsigned char foo1; fread(&foo1,1,sizeof(foo1),f); printf("%u\n",foo1); /* ovaj deo koda radi sasvim ok*/ double foo2; fread(&foo2,1,sizeof(foo2),f); printf("%f\n",foo2);/* ovaj deo koda takodje brlja i daje neke ogromneee vrednosti-gluposti tipa 1,2345 e+138*/ Pitanje je gde gresim kod citanja podataka tipa double,tipa unsigned short , tipa long? znam sta treba da dobijem. ovaj isti kod mi savrseno radi u MatLabu(jeste da se malo razlikuje,ali je jako slican programski jezik) Znam neke osnovne stvari o programiranju u C++,ali sam pocetnik i nije mi jasno gde gresim. da li nesto ne valja u samim argumentima funkcije fread, ili funkcije printf. probao sam i sa std::cout<<foo<<std::endl; i isto dobijam, tako da sam poceo da sumnjam da je najverovatnije greska u samoj funkciji fread. trazio sam po internetu i nesto ne mogu da nadjem odgovarajuce resenje. vrlo jednostavan problem. ali nesto me koci. imao sam programiranje davno i dosta sam stvari zaboravio, a nemam koga ni da pitam,pa se mucim od sinoc kao gresan sa dusom sto rekao nas narod. svaka pomoc i sugestija je jako dobro dosla. neka izmena koda,bilo sta. molim Vas. hvala |