Ispis brojeva iz binarne datoteke

Ispis brojeva iz binarne datoteke

offline
  • Pridružio: 11 Okt 2014
  • Poruke: 362

U binarnoj datoteci numbers.dat nalazi se određeni broj (najviše 100.000) nenegativnih cijelih brojeva u opsegu 0-65535 predstavljenih sa po dva bajta.
Potrebno je ispisati brojeve iz datoteke na ekran:
OUTPUT:
1 2 1 4 2 4 2 2 3 4 2
Kod:
#include <stdio.h> #include <stdint.h> int main() {   const char file[] = "numbers.dat";   FILE *fp = fopen(file, "rb");   uint16_t arr[100000];   int i;   int loaded=fread(arr, 2, 100000, fp);   printf("Loaded numbers: %d\n", loaded);   for (i = 0; i < loaded; i++)     printf("%d ", arr[i]);   fclose(fp);   return 0; } }

Ako brojeve 12142422342 pretvorim u binary to će biti: 11011001010010101110010 (konvertujem ih jedan po jedan) i pokrenem program dobijam output:

Loaded numbers: 11

12593 12592 12337 12592 12592 12336 12337 12337 12593 12337 12592


Kako mogu učitati brojeve predstavljene u dva bajta?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 11 Okt 2014
  • Poruke: 362

Napisano: 06 Mar 2022 15:46

Malo sam popravio kod, ali još ne dobijam tačan rezultat...



offline
  • Pridružio: 11 Okt 2014
  • Poruke: 362

Ako se brojevi pretvore u hex format, predstave svaki po dva bajta, i zapišu u binary file, taj file će izgledati ovako:


i kada pokrenem program dobijam tačan rezultat.

offline
  • dmn  Male
  • Novi MyCity građanin
  • Pridružio: 02 Sep 2013
  • Poruke: 1

Postoje 2 standarda čuvanja brojeva u binarnom obliku, big i little endian, npr broj 1000 je u hex 00 00 03 E8 ("veći" bajtovi su lijevo), ili E8 03 00 00 ("veći" bajtovi su desno), u zavisnosti koji standard se koristi. Konkretno, windows koristi jedan standard, Mac/Linux koriste drugi.
Ako je binarni fajl složen onako kako ga očekuješ, tvoj kod bi trebao da radi, u suprotnom, morao bi ručno preslagati bajte.

offline
  • Pridružio: 11 Okt 2014
  • Poruke: 362

hvala puno

Ko je trenutno na forumu
 

Ukupno su 1023 korisnika na forumu :: 84 registrovanih, 5 sakrivenih i 934 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 100ka, alternator, Apok, arezina, Arsenije, Asparagus, babaroga2, BlekMen, bojank, bokisha253, Borej, dacanaldo, darkojovxp, dearg, dendrit86, DENIRO, Django777, Dogma21, Dorcolac, dragan_mig31, Drugsparrow, dusanobr, Ezbuck, Fabius, gaga23, Gerila015, havoc995, ILGromovnik, JankoS, Karla, Koridor, krkalon, kybonacci, lcc, lelemud, Mediator, mercedesamg, mgolub, Mi lao shu, mila2206, milenko crazy north, milos97, misaru, Misirac, Mitrast, mix1, Nikolajevic, nnovakis, opt1, Pale2025, Parker, pein, Penzula, Pilence, Povratak1912, probisic, procesor, proka89, radionica1, Ripanjac, samoborac, samojednoimeznam, samsung, septembar, Sevetar, Shinobi, silikon, Siti2, sixpac, sslay, stegonosa, Str2022, styg, Topaz9, Username1000, Velizar Laro, Vlad000, Vlada1389, vuksa72, Vzor50, x011, Zadonbas, Zandar, zdrebac