在 C++ 里,如果需要把 int 的数值直接转成字符串(例如对于整数123,我能得到字符串”123″),我们可以用很多种方法来实现:
1) 用 C++ 里的流控制,可以轻松地实现整数转成字符串的功能:
#include <sstream> #include <iostream>main() { int abc = 123; std::ostringstream out; out << abc; std::cout << out.str() << std::endl; }
下面是宽字符版本的演示程序,稍微有点不同,则可以用下面的方法:
int current = 111;
std::wostringstream int2string;
int2string << current;wstring temp_file = int2string.str().c_str();
wprintf(L”current filename is: %s\n”, temp_file.c_str());
wprintf(L”current filename is: %s\n”, int2string.str().c_str());
2) Boost 是 C++ 的准标准库,我们当然应该尝试学习使用 Boost 来完成这个转换,例子如下:
#include <boost/lexical_cast.hpp>
main()
{
int abc = 123;
std::string s = boost::lexical_cast<std::string>(abc);
printf("test for string: %s",s.c_str());
}
3) 用 C 标准库里的 sprintf 或是 swprintf 函数,注意,sprintf 需要头文件 <stdio.h>,而 swprintf 需要 <stdio.h> 或者 <wchar.h> 头文件,可以看看MSDN里的例子:
#include <stdio.h>
int main( void )
{
char buffer[200], s[] = "computer", c = 'l';
int i = 35, j;
float fp = 1.7320534f;
/* Format and print various data: */
j = sprintf( buffer, " String: %s\n", s );
j += sprintf( buffer + j, " Character: %c\n", c );
j += sprintf( buffer + j, " Integer: %d\n", i );
j += sprintf( buffer + j, " Real: %f\n", fp );
printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
4) 用 C 标准库的 itoa 函数也可以实现从字符串到数字的转换,itoa的例子代码:
/* itoa example */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char buffer [33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,buffer,10);
printf ("decimal: %s\n",buffer);
itoa (i,buffer,16);
printf ("hexadecimal: %s\n",buffer);
itoa (i,buffer,2);
printf ("binary: %s\n",buffer);
return 0;
}
同样,用 C 标准库的 atoi 函数可以实现从字符串到数字的转换,atoi的例子代码:
/* atoi example */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char szInput [256];
printf ("Enter a number: ");
fgets ( szInput, 256, stdin );
i = atoi (szInput);
printf ("The value entered is %d. The double is %d.\n",i,i*2);
return 0;
}
一般来讲,就上面这么四种常用的方法就够用了。