在java里面,整数可以很方便地转换成字符串.
只要写成:
byte/short/int a = (范围内的数值);
String str = ""+ a;
System.out.println(str);
这样就解决了
但是C++ 里面的 string 并不支持这样的转换
将一个整数int a,转换成字符串呢?
在晚上搜到的解决方式是
长整形 long :
#include <stdlib.h>
char *ltoa(long value, char *string, int radix)
将长整形数转换为等价的字符串
value 转换的长整形数,radix 数制(如10表示十进制)
string 转换后的字符串
例如
long lo = 34567754433l;
char* cha= new char[64];
ltoa(lo,cha,10);
运行到这里,cha的结构就变成了内容看起来是 lo 的字符串了
整形 int:
#include <stdlib.h>
char *itoa(int value, char *string, int radix)
将整形数value转换为其等价的字符串
string 转换后的字符串
与long 相同用法
然后用string
这里只是提出想象的步骤,实际应用的时候可以计算好了int 的位数,然后建立与整数位数相等长度 加一或加二 的字符数组
PS:因为字符串以'\0'结尾,所以最后一位要留着并赋予成结尾的字符,长度+1
PS2: 如果是负数要在最前面留一个位置放置正负号 '-' 长度+1
另外:如果使用VC2008 使用了 itoa 命令,编译器会警告
warning C4996: 'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.
大意是不赞成使用 itoa, 因为可能因移植而造成名字冲突之类
最后放上网上找到的模拟 itoa 的代码
*==============================================================================
功能: 实现整型到字符串的转化
参数说明: int nValue [in]: 需要转化的整数值
char* szString [out]: 转化字符串结果
int radix [in]: 基数(进制)
返回值: 转化结果的指针
补充: 经过测试,发现这个函数有缺陷:认不出负数..........
------------------------------------------------------------------------------
// IFLYTEK_Embeded : sszhou : create : 2004-01-30
===============================================================================*/
char* IFLY_itoa(int nValue, char *szString, int radix)
{
int i=0, Len=0;
int nTemp=nValue;
char *lpString=szString;
/* 获得符号 */
if(nValue <0)
{
lpString[0] = '- ';
lpString++;
nTemp *= -1;
}
/* 倒序录入szString */
for(i=0; nTemp != 0 ; i++)
{
lpString[i] = nTemp%radix;
/* 进行数值向符号的转化 */
if(lpString[i] <=9)
{
lpString[i] += 0x30;
}
else
{
lpString[i] += 0x37;
}
nTemp /= radix;
}
/* 解决0的问题 */
if(i==0)
{
lpString[0] = 0x30;
i++;
}
/* 获得正确的顺序 */
Len = i;
for(i=0; i < (Len/2); i++)
{
nTemp = lpString[i];
lpString[i] = lpString[Len-i-1];
lpString[Len-i-1] = nTemp;
}
lpString[Len] =0;
return szString;
};