🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

9 total messages Started by flEa Mon, 02 Feb 1998 13:56
itoa() pod Linuxem?
#1154
Author: flEa
Date: Mon, 02 Feb 1998 13:56
7 lines
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?
#1155
Author: Marek Kotowski
Date: Mon, 02 Feb 1998 14:26
19 lines
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?
#1156
Author: Michal Malecki
Date: Wed, 04 Feb 1998 19:31
35 lines
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?
#1157
Author: Krzysztof Goworek
Date: Thu, 05 Feb 1998 07:42
20 lines
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?
#1158
Author: Mirek Prywata
Date: Thu, 05 Feb 1998 10:31
8 lines
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?
#1159
Author: Marcin Laszewski
Date: Fri, 06 Feb 1998 07:47
15 lines
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?
#1160
Author: Michal Malecki
Date: Fri, 06 Feb 1998 16:38
70 lines
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?
#1161
Author: Marek Kotowski
Date: Fri, 06 Feb 1998 17:06
23 lines
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?
#1162
Author: Michal Malecki
Date: Tue, 10 Feb 1998 18:41
36 lines
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