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

offline
  • Pridružio: 06 Apr 2012
  • Poruke: 1

Mala dopuna:
Little endian i big endian ne zavise od operativnog sistema u principu.
Što se C/C++ tiče bitno je da li je procesor little ili big endian. Većina je little endian.
S druge strane protokoli za komunikaciju mogu da zapisuju brojeve u oba formata, zavisno kako je definisano. Neki preferiraju big endian.

Ko je trenutno na forumu
 

Ukupno su 1850 korisnika na forumu :: 97 registrovanih, 10 sakrivenih i 1743 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 4695 - dana 26 Nov 2025 23:09

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 252., A.R.Chafee.Jr., alex71, alexbr, Apok, Asteker, Banovo Brdo, benne, bigfoot, Bivan, blatruc82, Bobrock1, bojan1234, bokicacar, Boris BM, Borkanović, Bubimir, cikadeda, CikaKURE, Colt D, Crazzer, crnitrn, crnogorac, Dannyboy, dejan.7951, deLacy, Denaya, Dioniss, Djuza, drpera, dushan, Fliper, FOX, Gitzherai, Goran 0000, ikan, ILGromovnik, Insan, Jaz, Jeremiah, Jez Bodez, Jonbonjovi, Kobrim, Kozi-RS, kybonacci, laurusri, Lester Freamon, Lošmi, M74AB3, Malahit, marekem23, mercedesamg, miki kv, Milan A. Nikolic, MK10, Moldovan, mrav pesadinac, mrmjtvc, mxzzz, N.e.m.a.nj.a., Naj-Turs, nebidrag, Niki2024, nobutado, Nomica, oldtimer, orfanel, pceklic, Petar888, picknick, Podljub, radoznao, Razdroid, rovac, sales, Samo gledam, Sevatar, shaja1, Shinobi, sifogiannis, Sirius, Smiljkovich, sspp, stokssone, tooljan, tooooom, tubular, tuf, vathra, vidra1, VJ, voja64, vuk77, vuksa72, x78186, XBMC, zokizemun