Poslao: 05 Mar 2022 16:34
|
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.
|
|
Poslao: 06 Mar 2022 16:53
|
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...
|
|
|
|
Poslao: 06 Mar 2022 16:54
|
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.
|
|
|
|
Poslao: 06 Mar 2022 18:33
|
offline
- dmn

- 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.
|
|
|
|
|
Poslao: 30 Mar 2025 12:43
|
offline
- HogarStrashni
- Novi MyCity građanin
- 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.
|
|
|
|