Ispis brojeva iz binarne datoteke

Ispis brojeva iz binarne datoteke

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

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

Napisano: 06 Mar 2022 15:46

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



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

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

hvala puno

Ko je trenutno na forumu
 

Ukupno su 708 korisnika na forumu :: 42 registrovanih, 8 sakrivenih i 658 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: amaterSRB, arzak, b_z_b, bojank, ccoogg123, Cranium, Dorcolac, Gosha101980, Hektor, Istman, Još malo pa deda, krkalon, Ligavesh, ljuka988, maiden6657, Marko Marković, Matija, mercedesamg, MiroslavD, nenad_l, nobutado, nuke92, ObelixSRB, Parker, RobinHood12, Rocker, ruma, S2M, sakota79, SOVO515, stalja, StefanopuloZ, Stoilkovic, TITAN DUDIN JARAN, Toni, Van, vathra, virked, Vlada78, voja64, zuxbg, 125