Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Konverzija binarnog fajla u decimalni

[es] :: C/C++ programiranje :: C/C++ za početnike :: Konverzija binarnog fajla u decimalni

[ Pregleda: 3179 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kallafcb

Član broj: 206911
Poruke: 3
*.dynamic.isp.telekom.rs.



Profil

icon Konverzija binarnog fajla u decimalni14.10.2012. u 14:16 - pre 140 meseci
Naime, potrebno je da konvertujem fajl koji je sacinjen od niza binarnih brojava, u fajl koji je sacinjen od konvertovanih tih binarnih brojeva u decimalne brojeve.
Binarni fajl izgleda : 01010010,01001001,01000110,01000110,11110110,11001111,00100000 , samo sto je ukupan broj ovakvih elemenata u fajla oko sto hiljada.
E sad potreban mi je izlazni fajl koji kad se izvrsi konverzija izgleda ovako: 82,73,70,70,246,207,32.
Znaci svaki ovaj 8-bitni broj kad se konvertuje treba da se kao decimalna vrednost upise u izlazni fajl. Tj. drugi binarni broj 01001001 treba da se upise u izlaznom fajlu kao drugi broj 73.
Moj kod preko kojeg sam pokusao ovo da izvedem je bio :
Code:

#include <stdio.h>
#include <string.h>

int main()
{
    
    FILE* izlaz;
    int i,br=0,b;

    int binary, digit, base = 1;
    int decimal=0;
    
    
    int niz2[]={11010010,11000110};
    izlaz=fopen("out2.h","w");
   
    for(i=0;i<2;i++)
    {

            while(br<8)
            {
                br++;

                digit = niz2[i] % 10;

                decimal += digit * base;

                base = base*2;
               niz2[i] /= 10;

            }
            br=0;
            fprintf(izlaz,"%d%c",decimal,',');
       

    }

}


Da li neko ima resenje, ili drugi kod za moj problem?
Hvala unapred.


[Ovu poruku je menjao X Files dana 14.10.2012. u 16:36 GMT+1]
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Konverzija binarnog fajla u decimalni14.10.2012. u 15:55 - pre 140 meseci
Najmanji problem je uraditi funkciju i kod za konverziju serije binarnih u dekadne brojeve, i sve to spakovati u neki fajl.

Kod ovakvih zadataka, veće je pitanje preciziranje izgleda ulaznog fajla. Na primer:
- da li su brojevi uvek 8-bitni?
- da li su uvek vodeće nule ispred binarnog broja?
- da li je separator uvek zarez?
- da li se u fajlu mogu očekivati blankovi ispred/iza zareza ili još ponegde?
- šta raditi ako se naiđe na odstupanje od pravila?

Što je ulazni fajl liberalnije definisan, kod će biti sporiji (mada je to na svim modernim računarima skoro neprimetno), ali verovatno bolje ocenjen ako se radi o nekom školskom zadatku. Ako ulazne fajlove generiše neki drugi automatski sistem i strogo su definisani, onda se pravi kod koji 100% odgovara definiciji ulaznog fajla.

Zatim, pitanja vezana za interfejs..
- konzolni ili forms program
- da li ulazni i izlazni fajl da budu definisani kroz argumente komandne linije
- itd


 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.adsl.verat.net.



+373 Profil

icon Re: Konverzija binarnog fajla u decimalni14.10.2012. u 15:57 - pre 140 meseci
Izgleda da ti je X Files resio deo problema (falili su indexi kod niz2). Zaboravio si jos da resetujes "base" kada zavrsi while() petlja/ili ulazi u for().
Mozda bi bilo bolje i da promenis while() uslov u
Code:
while(niz2[i] > 0)
jer ovako izmenjeno radi i sa promenljivim brojem cifara, a i brze se zavrsava ako je broj npr: 00000111.

Edit: mislim da ce biti problem ako pocinje 0, to je valjda oznaka za Octalni broj. Ovo se odnosi na ovako napisan primer gde si direktno ubacivao int-ove u niz.
 
Odgovor na temu

kallafcb

Član broj: 206911
Poruke: 3
*.dynamic.isp.telekom.rs.



Profil

icon Re: Konverzija binarnog fajla u decimalni14.10.2012. u 16:08 - pre 140 meseci
Prepravio sam while uslov kao sto ste rekli i stavio sam base=1 i decimal =0, ali kao sto je i napomenuto, kolko vidim pogresno radi kada binarni broj pocinje sa 0.
Kako bih jos mogao i taj problem da otklonim?
Inace binarni brojevi su uvek 8-bitni, odvojeni zarezom. Neki pocinju sa 0 neki sa 1 , zavisi od vrednosti samog broja.


Hvala na brzom odgovoru.
 
Odgovor na temu

kallafcb

Član broj: 206911
Poruke: 3
*.dynamic.isp.telekom.rs.



Profil

icon Re: Konverzija binarnog fajla u decimalni14.10.2012. u 16:21 - pre 140 meseci
@plague
Na sta tacno mislis kad kazes da su falili indexi kod niz2?
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.adsl.verat.net.



+373 Profil

icon Re: Konverzija binarnog fajla u decimalni14.10.2012. u 17:20 - pre 140 meseci
Pisalo je
Code:
niz2 /= 10
umesto
Code:
niz2[i] /= 10

Pogresno radi jer tumaci broj koji pocinje sa 0 kao oktalni (baza 8).
Moze se prevazici na vise nacina:
- Ako planiras da procitas prvo ceo file i smestis u niz stringova svaki od brojeva, mogao bi da castujes taj string u int cime bi suvisne nule izbacio i zavrsio sa nizom integera. Dalje bi te brojeve delio sa 10...
- Mozes sve u jednom prolazu citajuci karakter po karakter (ako je uvek isti format i uvek ima 8 cifara po broju) tako sto ces ici od najveceg stepena ka manjem (od 27 do 20) sve dok ne naidjes na "," sto je znak da prelazis na novi broj, resetujes "base" i upisujes stari.
- itd.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Konverzija binarnog fajla u decimalni14.10.2012. u 18:03 - pre 140 meseci
Citat:
plague: Pisalo je
Code:
niz2 /= 10
umesto
Code:
niz2[i] /= 10

Ovo je verovatno jer kod nije bio stavljen unutar CODE sekcije, pa je protumaceno kao ITALIC.
 
Odgovor na temu

aleksandar1519

Član broj: 307863
Poruke: 8
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Konverzija binarnog fajla u decimalni18.10.2012. u 00:18 - pre 140 meseci
Ukoliko znas da je svaki binarni broj 8 bitova (npr 00000011) i da se koristi zarez izmedju njih da ih rastavi, ne bi trebao da imas problema.
Znaci, prvo nadji broj zareza u datom fajlu, onda procitaj toliko binarnih brojeva +1 (za svaki po 8 bita) koje ces da prebacis u decimalne.
Sve razmake i ostale eventualne karaktere koje ne zelis moze lako da eliminises kad citas binarne brojeve.

POzdrav
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
..ppoe.dyn.broadband.blic.net.



+62 Profil

icon Re: Konverzija binarnog fajla u decimalni19.10.2012. u 08:32 - pre 140 meseci
A ovako nesto:

Code:

            while(br < 8)
            {
                digit = niz2[i] % 10;

                if (digit) 
                  decimal |=  1 << br++;

                niz2[i] /= 10;

            }


Ako sam negde omasio sintaksu, ne zamerite, ne koristim svakodnevno C...

Pozz
 
Odgovor na temu

aleksandar1519

Član broj: 307863
Poruke: 8
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Konverzija binarnog fajla u decimalni19.10.2012. u 15:08 - pre 140 meseci
Ne bas, ja sam sve to malo drugacije mislio. 2 funkcije, 1 da cita broj zareza (+1), npr int brj_zareza, toliko znaci imas 8bit brojeva.
Potom taj broj zareza, brj_zareza, posaljes 2. funkciji koja otvara zeljeni "file" i citas te 8bit binarne brojeve brj_zareza puta i stavljas u
array. Funkcija takodje sluzi za pretvaranje bin u dec. I ako zelis, zapises odgovore u taj neki novi fajl. E sada, svaki binarni broj citas
posebno kao karakter (fgetc) i, ako je procitani karakter nesto sto nije 1 ili 0, preskocis ga. Za pretvaranje bin u dec mozes da koristis vec navedene
sugestije, ili, jos jednostavnije, ako imas 8 bitova, tj 1,2,4,8.16,32,64,128 samo pomnozis sa 1 ili 0 i saberes posle sve. To je ako radis "peske"
bez ikakvih dodatnih funkcija itd.

Izvini, sad sam video da su ti brojevi vec u nizu? Ili sam pogresno razumeo? Ako imas 100 000 binarnih brojeva, bolje ti je da uradis kao sto sam rekao, da te binarne brojeve stavis u neki text file i onda ih citas i pretvaras u decimalne, jedan po jedan, pises u neki drugi file, opet citas itd itd..

[Ovu poruku je menjao aleksandar1519 dana 19.10.2012. u 16:40 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Konverzija binarnog fajla u decimalni

[ Pregleda: 3179 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.