Thread View: pl.comp.lang.c
9 messages
9 total messages
Started by flEa
Mon, 02 Feb 1998 13:56
itoa() pod Linuxem?
Author: flEa
Date: Mon, 02 Feb 1998 13:56
Date: Mon, 02 Feb 1998 13:56
7 lines
811 bytes
811 bytes
cze, =) Moze ktos wie, czy jest w standardowych bibliotekach gcc Linuxa odpowiednik funkcji itoa()? Ew. jak obejsc brak tej biblioteki w momencie gdy potrzebuje skonwertowac liczbe (int) na string? f.
Re: itoa() pod Linuxem?
Author: Marek Kotowski
Date: Mon, 02 Feb 1998 14:26
Date: Mon, 02 Feb 1998 14:26
19 lines
1190 bytes
1190 bytes
flEa wrote: > Moze ktos wie, czy jest w standardowych bibliotekach gcc Linuxa > odpowiednik funkcji itoa()? Ew. jak obejsc brak tej biblioteki w > momencie gdy potrzebuje skonwertowac liczbe (int) na string? itoa nie jest funkcja standardowa i np. w helpie do BC 4.5 jest podane, ze nie ma jej w UNIX-ie. Proponuje uzyc standardowej funkcji sprintf: sprintf(Buffer, "%d", Zmienna); Jest to konstrukcja przenosna, bo dziala w kazdym srodowisku i w kazdym kompilatorze. Ale dodaje to tylko nawiasem, bo tu, w grupie, przenosnosc kodu nie jest terminem lubianym. :-) Pozdrawiam Marek Kotowski
Re: itoa() pod Linuxem?
Author: Michal Malecki
Date: Wed, 04 Feb 1998 19:31
Date: Wed, 04 Feb 1998 19:31
35 lines
2249 bytes
2249 bytes
Marek Kotowski <mkot@imm.org.pl> wrote:
: flEa wrote:
:> Moze ktos wie, czy jest w standardowych bibliotekach gcc Linuxa
:> odpowiednik funkcji itoa()? Ew. jak obejsc brak tej biblioteki w
:> momencie gdy potrzebuje skonwertowac liczbe (int) na string?
: itoa nie jest funkcja standardowa i np. w helpie
: do BC 4.5 jest podane, ze nie ma jej w UNIX-ie.
: Proponuje uzyc standardowej funkcji sprintf:
: sprintf(Buffer, "%d", Zmienna);
: Jest to konstrukcja przenosna, bo dziala w kazdym
: srodowisku i w kazdym kompilatorze. Ale dodaje to
: tylko nawiasem, bo tu, w grupie, przenosnosc kodu
: nie jest terminem lubianym. :-)
itoa trzeba przyznac jest chorym wymyslem Borlanda (moze i nie Borlanda).
Nalezy stosowac zawsze sprintf, gdyz tam mamy mozliwosc - w przeciwienstwie
do itoa - dostosowywac sobie do formatu, jaki nas interesuje. Np. w itoa
nie wymusisz, zebys mial powiedzmy liczbe na 5 polach z zerami na poczatku.
Za to wymusisz uzywajac konstrukcji sprintf( buf, "%05d", zmienna );.
Podobnie, nie wymusisz zapisu szesnastkowego. A sprintf da ci rowniez
mozliwosc konwersji z innych typow, rowniez float i double (z dowolna
notacja i liczba miejsc po przecinku). itoa owe typy przekonwertowalby ci
na int. I ten argument juz chyba calkiem dyskwalifikuje ta funkcje z uzycia.
Pozdrawiam,
--
.---. . . - Michal Malecki <mmalecki@technologist.com>/The things that
\___ ,-. | , |- ,-. ,- mUd: zly.mud.org.pl 4000. /can't destroy you
\ |-' |< | | | | uRl: www.kis.p.lodz.pl/~sektor /make you
`---' `-' ' ` `' `-' ' pGp: sektor@zly.kis.p.lodz.pl /stronger...
Re: itoa() pod Linuxem?
Author: Krzysztof Goworek
Date: Thu, 05 Feb 1998 07:42
Date: Thu, 05 Feb 1998 07:42
20 lines
1848 bytes
1848 bytes
Michal Malecki napisał(a) w wiadomości: <6bafn0$l86@polonez.man.lodz.pl>... >itoa trzeba przyznac jest chorym wymyslem Borlanda (moze i nie Borlanda). >Nalezy stosowac zawsze sprintf, gdyz tam mamy mozliwosc - w przeciwienstwie >do itoa - dostosowywac sobie do formatu, jaki nas interesuje. Np. w itoa >nie wymusisz, zebys mial powiedzmy liczbe na 5 polach z zerami na poczatku. a jesli nie chce nic wymuszac ? >Podobnie, nie wymusisz zapisu szesnastkowego. A sprintf da ci rowniez >mozliwosc konwersji z innych typow, rowniez float i double (z dowolna >notacja i liczba miejsc po przecinku). itoa owe typy przekonwertowalby ci >na int. I ten argument juz chyba calkiem dyskwalifikuje ta funkcje z uzycia. a jezeli nie chce nic konwertowac ? wydaje mi sie, ze jest to calkiem dobra funkcja, a na pewno duzo szybsza niz sprintf. -- _____________________________________________________________________ | full name: Krzysztof Goworek, sex: male, occupation: developer | | mailto:kabel@zeus.polsl.gliwice.pl || mailto:krzys@enpol.gliwice.pl | |_____________________________________________________________________|
Re: itoa() pod Linuxem?
Author: Mirek Prywata
Date: Thu, 05 Feb 1998 10:31
Date: Thu, 05 Feb 1998 10:31
8 lines
838 bytes
838 bytes
Krzysztof Goworek wrote: > > wydaje mi sie, ze jest to calkiem dobra funkcja, a na pewno duzo szybsza > niz sprintf. A ile tych liczb chcesz skonwertowac? 10^6? 10^7 ?? pozdrawiam Mirek
Re: itoa() pod Linuxem?
Author: Marcin Laszewski
Date: Fri, 06 Feb 1998 07:47
Date: Fri, 06 Feb 1998 07:47
15 lines
1112 bytes
1112 bytes
Mirek Prywata (mpry@fuw.edu.pl) wrote: : Krzysztof Goworek wrote: : > : > wydaje mi sie, ze jest to calkiem dobra funkcja, a na pewno duzo szybsza : > niz sprintf. : : A ile tych liczb chcesz skonwertowac? 10^6? 10^7 ?? : pozdrawiam : Mirek Twoj rpzedmowca mial racje - napsiana w "C" procedurka jest kilkanascie razy szybsza od sprintf-a. A co do tych 10^6, to co Cie dziwi? Bazy danych nigdy nie eksportowales czy co? ml
Re: itoa() pod Linuxem?
Author: Michal Malecki
Date: Fri, 06 Feb 1998 16:38
Date: Fri, 06 Feb 1998 16:38
70 lines
2641 bytes
2641 bytes
Krzysztof Goworek <krzys@enpol.gliwice.pl> wrote:
: a jesli nie chce nic wymuszac ?
Niech ci bedzie.
: a jezeli nie chce nic konwertowac ?
A jezeli nie rozumiesz, co mialem na mysli ?
Chodzilo mi o to, ze itoa nie uzyjesz do przekonwertowania na tekst liczb
typow float i double. Dlatego wlasnie, ze itoa zamieni ci je na calkowite.
A jezeli wlasnie nie chcesz nic konwertowac, to sorry wodzu, ale musisz uzyc
sprintf.
: wydaje mi sie, ze jest to calkiem dobra funkcja, a na pewno duzo szybsza
: niz sprintf.
Duzo to nie. Ale jest szybsza. Dlatego np. zaleca sie uzywac zamiast printf
z jednym argumentem puts.
Przykladowo, fragment sprintf moglby wygladac tak:
if ( *pformat == '%' )
{
switch ( *++pformat )
{
...
case '%':
*target++ = '%';
break;
case 'd':
intval = va_arg( ap, int );
target = fill_dec( target, intval );
break;
...
}
...
}
Natomiast w itoa masz krocej:
target = fill_dec( target, intval );
*target = 0;
return target;
Moze autorzy stwierdzili, ze nie ma sensu pisac takiej funckji.
Albo nie pomysleli o udostepnieniu funkcji (ktora nazwalem tutaj "fill_dec").
Ewentualnie nie ma tam wcale wywolania takiej funkcji. Wcale by mnie to nie
dziwilo, na intuicje bowiem biorac, funkcja sprintf jest podstawa wsyzstkich
xprintf. To znaczy, ze printf moze w zasadzie wygladac tak:
int printf( const char* format, ... );
{
char buf [ MAX_STRING ];
int retval;
va_list* ap;
va_start( ap, format );
retval = sprintf( buf, ap );
puts( buf );
return retval;
}
I wcale by mnie to nie dziwilo. Zwlaszcza, ze to jest i/o buforowane.
--
.---. . . - Michal Malecki <mmalecki@technologist.com>/The things that
\___ ,-. | , |- ,-. ,- mUd: zly.mud.org.pl 4000. /can't destroy you
\ |-' |< | | | | uRl: www.kis.p.lodz.pl/~sektor /make you
`---' `-' ' ` `' `-' ' pGp: sektor@zly.kis.p.lodz.pl /stronger...
Re: itoa() pod Linuxem?
Author: Marek Kotowski
Date: Fri, 06 Feb 1998 17:06
Date: Fri, 06 Feb 1998 17:06
23 lines
1262 bytes
1262 bytes
Michal Malecki wrote:
> xprintf. To znaczy, ze printf moze w zasadzie wygladac tak:
>
> int printf( const char* format, ... );
^ (MK)
> {
> char buf [ MAX_STRING ];
> int retval;
>
> va_list* ap;
> va_start( ap, format );
>
> retval = sprintf( buf, ap );
> puts( buf );
>
> return retval;
> }
Obawiam sie, ze pomylil Pan tu funkcje sprintf z funkcja
vsprintf. Poza tym typ va_list sam w sobie jest wskaznikiem
i znak * jest tu bledem.
Marek Kotowski
Re: itoa() pod Linuxem?
Author: Michal Malecki
Date: Tue, 10 Feb 1998 18:41
Date: Tue, 10 Feb 1998 18:41
36 lines
1933 bytes
1933 bytes
Marek Kotowski <mkot@imm.org.pl> wrote:
: Michal Malecki wrote:
:> xprintf. To znaczy, ze printf moze w zasadzie wygladac tak:
:>
:> int printf( const char* format, ... );
: ^ (MK)
:> {
:> char buf [ MAX_STRING ];
:> int retval;
:>
:> va_list* ap;
:> va_start( ap, format );
:>
:> retval = sprintf( buf, ap );
:> puts( buf );
:>
:> return retval;
:> }
: Obawiam sie, ze pomylil Pan tu funkcje sprintf z funkcja
: vsprintf. Poza tym typ va_list sam w sobie jest wskaznikiem
: i znak * jest tu bledem.
Przepraszam! Racja! Jakby nie patrzec w swoich deklaracjach podobnych
funkcji tez mam vsprintf. Dziekuje za wytkniecie rowniez reszty bledow:
- srednika (napisalem odruchowo zapowiedz - za duzo odruchow)
- gwiazdka (w C++ zwykle nie bawie sie w va_list tylko pisze void*)
A moze Curie-Sklodowska tez ?
--
.---. . . - Michal Malecki <mmalecki@technologist.com>/The things that
\___ ,-. | , |- ,-. ,- mUd: zly.mud.org.pl 4000. /can't destroy you
\ |-' |< | | | | uRl: www.kis.p.lodz.pl/~sektor /make you
`---' `-' ' ` `' `-' ' pGp: sektor@zly.kis.p.lodz.pl /stronger...
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads