Ispis brojeva iz binarne datoteke

Ispis brojeva iz binarne datoteke

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

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: 355

Napisano: 06 Mar 2022 15:46

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



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

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: 355

hvala puno

Ko je trenutno na forumu
 

Ukupno su 1024 korisnika na forumu :: 57 registrovanih, 11 sakrivenih i 956 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: 357magnum, A.R.Chafee.Jr., aksentijeivan, aleksmajstor, AleksSE, Andrija357, Apok, Bobrock1, bufanje, darkangel, ddjxxi, Djokkinen, Dorcolac, dragoljub11987, dragon986, Duh sa sekirom, dzoni19, Fabius, FileFinder, Georgius, hyla, ILGromovnik, ivan979, ivica976, kobaja77, Kont, Koridor, Krusarac, Metanoja, mikrimaus, Milos ZA, naki011, Ne doznajem se u oružje, Nemanja.M, nemkea71, oldtimer, operniki, opt1, Panter, pein, Penzula, pera12345, powSrb, procesor, raptorsi, S-lash, ss10, Stanlio, stegonosa, Stojković, Tores, torlak 1, Tvrtko I, vasa.93, VJ, zillbg, zlatkoa987