c++ 中使整型转换成字符型

 

在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;
};

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值