본문 바로가기

컴퓨터/언어,프로그래밍

itoa 함수 소스

/**
* Ansi C "itoa" based on Kernighan & Ritchie's "Ansi C":
*/

void strreverse(char* begin, char* end) {
         char aux;
         while(end>begin)
         aux=*end, *end--=*begin, *begin++=aux;
}

void itoa(int value, char* str, int base) {
       static char num[] = "0123456789abcdefghijklmnopqrstuvwxyz";
       char* wstr=str;
       int sign;

       // Validate base
       if (base<2 || base>35){ *wstr='\0'; return; }

       // Take care of sign
       if ((sign=value) < 0) value = -value;

       // Conversion. Number is reversed.
       do *wstr++ = num[value%base]; while(value/=base);
       if(sign<0) *wstr++='-';
       *wstr='\0';

       // Reverse string
       strreverse(str,wstr-1);
}

	
	
/**
* Ansi C "itoa" based on Kernighan & Ritchie's "Ansi C"
* with slight modification to optimize for specific architecture:
*/
void strreverse(char* begin, char* end) {
char aux;
while(end>begin)
aux=*end, *end--=*begin, *begin++=aux;
}
void itoa(int value, char* str, int base) {
static char num[] = "0123456789abcdefghijklmnopqrstuvwxyz";
char* wstr=str;
int sign;
div_t res;
// Validate base
if (base<2 || base>35){ *wstr='\0'; return; }
// Take care of sign
if ((sign=value) < 0) value = -value;
// Conversion. Number is reversed.
do {
res = div(value,base);
*wstr++ = num[res.rem];
}while(value=res.quot);
if(sign<0) *wstr++='-';
*wstr='\0';
// Reverse string
strreverse(str,wstr-1);
}

/**
* C++ version std::string style "itoa":
*/
std::string itoa(int value, int base) {
enum { kMaxDigits = 35 };
std::string buf;
buf.reserve( kMaxDigits ); // Pre-allocate enough space.
// check that the base if valid
if (base < 2 || base > 16) return buf;
int quotient = value;

// Translating number to string with base:
do {
buf += "0123456789abcdef"[ std::abs( quotient % base ) ];
quotient /= base;
} while ( quotient );
// Append the negative sign for base 10
if ( value < 0 && base == 10) buf += '-';

std::reverse( buf.begin(), buf.end() );
return buf;
}

/**
* C++ version char* style "itoa":
*/
char* itoa( int value, char* result, int base ) {
// check that the base if valid
if (base < 2 || base > 16) { *result = 0; return result; }

char* out = result;
int quotient = value;

do {
*out = "0123456789abcdef"[ std::abs( quotient % base ) ];
++out;
quotient /= base;
} while ( quotient );
// Only apply negative sign for base 10
if ( value < 0 && base == 10) *out++ = '-';

std::reverse( result, out );
*out = 0;
return result;
}
출처 : http://www.jb.man.ac.uk/~slowe/cpp/itoa.html
제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...