Click to See Complete Forum and Search --> : C++ String: How to convert a numeric type to a string?


Gabriel Fleseriu
February 13th, 2003, 01:31 PM
Q: How to convert a numeric type to a string?

A:

The old C method (deprecated):


char c[10]; // simply large enough - don't forget the
// extra byte needed for the trailing '\0'
int i = 1234;
sprintf(c, "%d", i);

See 'sprintf()' in e.g. MSDN for further details.


Using 'CString':


int i = 1234;
CString cs;
cs.Format("%d", i);

The format specifiers are the same as for 'sprintf()'. See the 'CString' documentation in MSDN - it is fairly straight forward.

A word of warning: mismatching the format specifiers ('%d') and the actually passed parameters will lead to unpredictable results, both for 'sprintf()' and for 'CString::Format()'.


The C++ way:

Following sample shows a template function that uses Standard C++ classes to complete the task:


#include <string>
#include <sstream>
#include <iostream>

template <class T>
std::string to_string(T t, std::ios_base & (*f)(std::ios_base&))
{
std::ostringstream oss;
oss << f << t;
return oss.str();
}

int main()
{
// the second parameter of to_string() should be one of
// std::hex, std::dec or std::oct
std::cout<<to_string<long>(123456, std::hex)<<std::endl;
std::cout<<to_string<long>(123456, std::oct)<<std::endl;
return 0;
}

/* output:
1e240
361100
*/

This method is not only very elegant, but also type safe, because the compiler will pick the proper 'std::ostringstream::operator <<()' at compile time, according to the operand type.
<br><br>

NMTop40
July 4th, 2004, 04:37 AM
There is a new method with 'boost::format', which combines the advantages of printf with the type-safety and extensibility of streams.

One of the advantages (as with printf) is you can store the entire format string as a template (not a C++ template). This is better for internationalisation (making string tables), as well as the fact that even just using a local string table can significantly reduce the code-size.
<br><br>

DrCoolSanta
November 17th, 2008, 02:47 AM
Another method is top use itoa() function that is there in many Windows compilers. I myself have tested in Dev-C++ and VC++