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

Konverzija int u char* i obrnuto

[es] :: C/C++ programiranje :: Konverzija int u char* i obrnuto

Strane: 1 2

[ Pregleda: 9568 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Iznogud
Subotica

Član broj: 1721
Poruke: 212
*.171.EUnet.yu



Profil

icon Konverzija int u char* i obrnuto13.08.2002. u 18:27 - pre 264 meseci
Moze li neko da mi kaze kako najjednostavnije konvertovati neko broj
tipa int (ili int*) u char [] (ili char*) (i obratno char* u int) -dakle u pokazivac na niz znakova da bih mogao pristupiti svakoj cifri ponasob.
Imam neko resenje ali mi se ne svidja. Znam da postoje f-je tipa itoa, i64toa ali bih hteo sam da napisem f-ju.
 
Odgovor na temu

Aleksandar Marković
Part Time Freelance Journalist

Član broj: 219
Poruke: 5220
*.verat.net

Sajt: www.akcenat.info


+8 Profil

icon Re: Konverzija int u char* i obrnuto13.08.2002. u 18:43 - pre 264 meseci
Hajde, Random objasni čoveku....:-)
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Konverzija int u char* i obrnuto13.08.2002. u 19:03 - pre 264 meseci
Na 32-bitnim sistemima int i char* imaju istu veličinu, pa je konverzija trivijalna:

Code:

char* char_string = "Neki String";
int celobrojni = (int)char_string;
char* neki_drugi_char_string = (char*) celobrojni;


Međutim, ne mogu da izdržim a da ne dodam da su u najvećem broju slučajeva ovakve konverzije znak ozbiljnog propusta u dizajnu.

Naknadna dopuna: Ovo u stvari nije odgovor na postavljeno pitanje, ali ga ipak ostavljam.

[Ovu poruku je menjao Dragi Tata dana 13.08.2002 u 11:31 AM GMT]
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
194.106.163.*

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Konverzija int u char* i obrnuto13.08.2002. u 20:14 - pre 264 meseci
Ajde, kad sam već prozvan, evo i rešenje bez castovanja...

Code:

void inttochar(int ceo_broj, char* char_string) {
    int i = 0;
    int j;
    char tmp;
    
    /* odvajamo cifru po cifru sa ceo_broja i trpamo odgovarajuci ascii znak u niz,
       od najnize cifre ka najvisoj. 0x30 je ASCII znak '0', tj. donje se moze
           napisati i kao: char_string[i++] = ceo_broj % 10 + '0'
     */
    while (ceo_broj>10) {
        char_string[i++]=ceo_broj%10+0x30;
        ceo_broj=(ceo_broj-ceo_broj%10)/10;
    }
    char_string[i++]=ceo_broj+0x30;
    char_string[(i)]=''; /* ovo i sam stavio u zagradu da se ne bi zbunio gojkov parser :o) */
    
    /* sad treba samo prevrnuti dobijeni string kao carapu, jer smo cifre stavljali
       obrnutim redosledom
     */
    for (j=0; j<i/2; j++) {
        tmp=char_string[j];
        char_string[j]=char_string[(i-1)-j];
        char_string[(i-1)-j]=tmp;
    }

}

int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

jc denton

Član broj: 2358
Poruke: 1705
*.ptt.yu



Profil

icon Re: Konverzija int u char* i obrnuto13.08.2002. u 20:24 - pre 264 meseci
A, da li je moglo nekako iz prvog udarca (petlje) da se odradi ovo ?
Bez one for petlje?


fire, walk with me
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Konverzija int u char* i obrnuto13.08.2002. u 20:30 - pre 264 meseci
Aaaaah! Pogrešno sam razumeo pitanje!

Zaboravite ono sa kastovanjem - to radi nešto sasvim drugo.
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
194.106.163.*

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Konverzija int u char* i obrnuto14.08.2002. u 15:21 - pre 264 meseci
jc denton: jedna petlja bi mogla da se izbaci ako bi mogao bez petlje da odrediš broj cifara, odnosno red veličine broja. Onda bi mogao da smeštaš cifre obrnutim redosledom u char_string. Nemam ideju sada kako bi bez petlje mogao odrediti broj potrebnih cifara. Ali zanimljivo je pitanje, ajde baš da vas vidim :o). Ovo će biti ko Dejanove Pitalice.
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Konverzija int u char* i obrnuto14.08.2002. u 19:38 - pre 264 meseci
Prikacio sam Dev-C++ (www.bloodshed.net) projekat u kome se nalazi malena funkcija Iznogud2String() koja radi isto sto i itoa() s tim da se podrazumevana osnova 10. :)

Iznogud sada moze malo da analizira source i da sam napise String2Iznogud() funkciju koja ce string da prebaci u broj (mnogo lakse). :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Prikačeni fajlovi
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Konverzija int u char* i obrnuto14.08.2002. u 19:40 - pre 264 meseci
Citat:
random:
jc denton: jedna petlja bi mogla da se izbaci ako bi mogao bez petlje da odrediš broj cifara, odnosno red veličine broja. Onda bi mogao da smeštaš cifre obrnutim redosledom u char_string. Nemam ideju sada kako bi bez petlje mogao odrediti broj potrebnih cifara. Ali zanimljivo je pitanje, ajde baš da vas vidim :o). Ovo će biti ko Dejanove Pitalice.


Moje resenje upravo to i radi - odredi se broj cifara (pomocu prirodnog logaritma) a onda se radi ostalo...

Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.verat.net



+3 Profil

icon Re: Konverzija int u char* i obrnuto14.08.2002. u 21:56 - pre 264 meseci
Leko, to resenje uopste nije bolje (brze) jer kad pozoves prirodni logaritam program ce ipak pomocu petlje da racuna prirodni logaritam koristeci tejlorov polinom.

Znaci ipak ces imati for petlju ali se nece videti u kodu.

Ne vidim nacin da se izostavi for petlja.

U stvari moze da se zeza sa pokazivacima pa da brojeve stavljate unazad ali tako se samo bezveze komplikuje. To vreme moze da se utrosi da se optimizuju neke druge stvari i da se optimizuje neki komlikovaniji algoritam i da neki eksponencijalni svedete na polinomijalni. Ovako samo povecavate sansu da dodje do greske i povecavate vreme odrzavnja koda. Dok drugi programer koji treba nesto da ispravi/doda shvati sta ste hteli proci ce mnogo vremena.

Zato sam protivnik optimizovanja nekih tako banalnih stvari, a narocito ako se to ne izvrsava previse cesto. Naravno ako je to neko 3d programiranje gde se stalno racuna i racuna onda bi trebalo optimizovati kod.

...Svi imaju pravo da se ne slazu sa mnom :-)

 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
194.106.163.*

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Konverzija int u char* i obrnuto15.08.2002. u 00:48 - pre 264 meseci
Da, tačno, ceobrojni deo od log10(x) bi dao broj cifara. Mada je to dekadni a ne prirodni logaritam.

I da, slažem se, tako bi sors bio kraći, ali bi se program zapravo duže izvršavao, jer se log10 računa kao double pa castuje u int, što je duže nego deljenje po modulu i oduzimanje.
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Konverzija int u char* i obrnuto15.08.2002. u 02:16 - pre 264 meseci
Ako koristiš C++ (ne C), rešenje bi mogla da bude klasa lexical_cast iz boost biblioteke:

http://www.boost.org/libs/conversion/lexical_cast.htm
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Konverzija int u char* i obrnuto15.08.2002. u 13:23 - pre 264 meseci
Ama ljudi covek je hteo da napise svoju funkciju cisto radi vezbanja, ja sam mu napisao funkciju koja radi. Niko od Vas nije pomogao coveku - svi ste poceli da raspravljate, teoretisete.
Naravno, ja cu UVEK da se slozim da kod koji sam napisao nije optimizovan - banalno receno nije dobar - ali radi. Covek na osnovu mog koda moze da krene u istrazivanje. Ako dobro poznaje matematiku moze da primeni razne metode da dodje do resenja.
Drugacije bi bilo da je postavio pitanje "Kako da se NAJBRZE izvede konverzija BROJ->STRING ?" , onda bih se ja bacio i na optimizovanje koda!

P.S. randomovo resenje mi je palo odmah na pamet, ali ne volim kada dobijem string koji treba da "obrcem". :)

Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.verat.net



+3 Profil

icon Re: Konverzija int u char* i obrnuto15.08.2002. u 16:19 - pre 264 meseci
Ma ja sam utripovao da on hoce da napravi nesto sto blize optimalnom resenju pa otud cela ova prica. A ako nekog i to zanima o tome u nekoj drugoj temi....
 
Odgovor na temu

VRider
Marković Damir
(BGD/SD Karaburma)/Pirot

Član broj: 1510
Poruke: 4132
195.252.107.*

Jabber: damirm | gmail | com
ICQ: 134002435


+13 Profil

icon Re: Konverzija int u char* i obrnuto14.12.2002. u 14:25 - pre 260 meseci
Citat:
Dragi Tata:
Na 32-bitnim sistemima int i char* imaju istu veličinu, pa je konverzija trivijalna:

Code:

char* char_string = "Neki String";
int celobrojni = (int)char_string;
char* neki_drugi_char_string = (char*) celobrojni;




Kod mene ovo vraca gresku kad izvrsavam program
"Segmentation fault"

Uz to, funkcija itoa() u stdlib.h vise ne postoji?! GCC 3.2.

JaFreelancer.com
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..g-c5300-1.dialup.nethere.net



+6 Profil

icon Re: Konverzija int u char* i obrnuto15.12.2002. u 03:39 - pre 260 meseci
Meni se ne javlja nikakav "Segmentation fault" (odnosno "Access Violation" na Win32) kod izvršavanja ovog koda, a ne znam i zašto bi. Jesi li siguran da nisi nešto naknadno dodao?

Međutim, kao što sam već napomenuo, ovaj ne radi ono što je postavljač teme želeo (mali nesporazum), mada je strogo gledano, konverzija int u char* upravo to što sam napisao.

 
Odgovor na temu

VRider
Marković Damir
(BGD/SD Karaburma)/Pirot

Član broj: 1510
Poruke: 4132
195.252.107.*

Jabber: damirm | gmail | com
ICQ: 134002435


+13 Profil

icon Re: Konverzija int u char* i obrnuto15.12.2002. u 17:54 - pre 260 meseci
Sta se desilo sa dobrim starim itoa()?
JaFreelancer.com
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.beotel.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Konverzija int u char* i obrnuto15.12.2002. u 18:01 - pre 260 meseci
Ne odgovara ti sprintf()?? Koja ti je konverzija zapravo potrebna?

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

VRider
Marković Damir
(BGD/SD Karaburma)/Pirot

Član broj: 1510
Poruke: 4132
195.252.107.*

Jabber: damirm | gmail | com
ICQ: 134002435


+13 Profil

icon Re: Konverzija int u char* i obrnuto15.12.2002. u 20:15 - pre 260 meseci
int u string ili char*.
JaFreelancer.com
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.client.attbi.com



+18 Profil

icon Re: Konverzija int u char* i obrnuto16.12.2002. u 00:13 - pre 260 meseci
To radi sscanf (radi i itoa, kao sto je neko gore napisao):

char *str="102";
int i;
sscanf(str, "%d", &i);

I onda ce i da bude 102. Da li je to to sto tebi treba?
 
Odgovor na temu

[es] :: C/C++ programiranje :: Konverzija int u char* i obrnuto

Strane: 1 2

[ Pregleda: 9568 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

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