/* Copyright (c) 2000 TXT DataKonsult Ab & Monty Program Ab
Copyright ( c ) 2009 - 2011 , Monty Program Ab
Redistribution and use in source and binary forms , with or without
modification , are permitted provided that the following conditions are
met :
1 . Redistributions of source code must retain the above copyright
notice , this list of conditions and the following disclaimer .
2 . Redistributions in binary form must the following disclaimer in
the documentation and / or other materials provided with the
distribution .
THIS SOFTWARE IS PROVIDED BY < COPYRIGHT HOLDER > ` ` AS IS ' ' AND ANY
EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL < COPYRIGHT HOLDER > OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT
LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF
USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY ,
OR TORT ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE .
*/
/*
Defines : longlong2str ( ) ;
longlong2str ( dst , radix , val )
converts the ( longlong ) integer " val " to character form and moves it to
the destination string " dst " followed by a terminating NUL . The
result is normally a pointer to this NUL character , but if the radix
is dud the result will be NullS and nothing will be changed .
If radix is - 2 . . - 62 , val is taken to be SIGNED .
If radix is 2 . . 62 , val is taken to be UNSIGNED .
That is , val is signed if and only if radix is . You will normally
use radix - 10 only through itoa and ltoa , for radix 2 , 8 , or 16
unsigned is what you generally want .
_ dig_vec is public just in case someone has a use for it .
The definitions of itoa and ltoa are actually macros in m_string . h ,
but this is where the code is .
Note : The standard itoa ( ) returns a pointer to the argument , when int2str
returns the pointer to the end - null .
itoa assumes that 10 - base numbers are always signed and other aren ' t .
*/
#include "strings_def.h"
#ifndef ll2str
/*
This assumes that longlong multiplication is faster than longlong division .
*/
char *ll2str(longlong val,char *dst,int radix, int upcase)
{
char buffer[65 ];
register char *p;
long long_val;
const char *dig_vec;
ulonglong uval= (ulonglong) val;
if (radix < -36 || radix > 36 )
dig_vec= _dig_vec_base62;
else
dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower;
if (radix < 0 )
{
if (radix < -62 || radix > -2 ) return (char *) 0 ;
if (val < 0 ) {
*dst++ = '-' ;
/* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
uval = (ulonglong)0 - uval;
}
radix = -radix;
}
else
{
if (radix > 62 || radix < 2 ) return (char *) 0 ;
}
if (uval == 0 )
{
*dst++='0' ;
*dst='\0' ;
return dst;
}
p = &buffer[sizeof (buffer)-1 ];
*p = '\0' ;
while (uval > (ulonglong) LONG_MAX)
{
ulonglong quo= uval/(uint) radix;
uint rem= (uint) (uval- quo* (uint) radix);
*--p= dig_vec[rem];
uval= quo;
}
long_val= (long ) uval;
while (long_val != 0 )
{
long quo= long_val/radix;
*--p= dig_vec[(uchar) (long_val - quo*radix)];
long_val= quo;
}
while ((*dst++ = *p++) != 0 ) ;
return dst-1 ;
}
#endif
#ifndef longlong10_to_str
char *longlong10_to_str(longlong val,char *dst,int radix)
{
char buffer[65 ];
register char *p;
long long_val;
ulonglong uval= (ulonglong) val;
if (radix < 0 )
{
if (val < 0 )
{
*dst++ = '-' ;
/* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
uval = (ulonglong)0 - uval;
}
}
if (uval == 0 )
{
*dst++='0' ;
*dst='\0' ;
return dst;
}
p = &buffer[sizeof (buffer)-1 ];
*p = '\0' ;
while (uval > (ulonglong) LONG_MAX)
{
ulonglong quo= uval/(uint) 10 ;
uint rem= (uint) (uval- quo* (uint) 10 );
*--p = _dig_vec_upper[rem];
uval= quo;
}
long_val= (long ) uval;
while (long_val != 0 )
{
long quo= long_val/10 ;
*--p = _dig_vec_upper[(uchar) (long_val - quo*10 )];
long_val= quo;
}
while ((*dst++ = *p++) != 0 ) ;
return dst-1 ;
}
#endif
Messung V0.5 in Prozent C=97 H=75 G=86
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-10-08)
¤
*© Formatika GbR, Deutschland