C++ Itoa implement for std string

Edit

Last modification : 2011-04-15 11:02:59

/**                                                                                                                                                          
 * C++ version 0.4 std::string style "itoa":                                                                                                                
 * Contributions from Stuart Lowe, Ray-Yuan Sheu,                                                                                                           
                                                                                                                                                            
 * Rodrigo de Salvo Braz, Luc Gallant, John Maloney and Brian Hunt                                                                                          
*/

#include <string>

std::string itoa_cpp(int value, int base)                                                                                                                
{                                                                                                                                                        
    std::string buf;                                                                                                                                     

    // check that the base if valid                                                                                                                      
    if (base < 2 || base > 16)                                                                                                                           
	return buf;                                                                                                                                      

    enum { kMaxDigits = 35 };                                                                                                                            
    buf.reserve( kMaxDigits );  // Pre-allocate enough space.                                                                                            

    int quotient = value;                                                                                                                                

    // Translating number to string with base:                                                                                                           
    do {                                                                                                                                                 
	buf += "0123456789abcdef"[ std::abs( quotient % base ) ];                                                                                        
	quotient /= base;                                                                                                                                
    } while ( quotient );                                                                                                                                

    // Append the negative sign                                                                                                                          
    if ( value < 0 )                                                                                                                                     
	buf += '-';                                                                                                                                      

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