【原】整型与字符串的相互转化

来源:互联网 发布:傲剑丹田升级数据大全 编辑:程序博客网 时间:2024/05/17 05:37

 

整型与字符串的相互转化

By 呆龙

常用到的整形与字符串相互转化多用到库函数:

atoi/itoa/sprintf

下面是不用库函数自己实现整形转化为字符串

整型数据456转化字符“456”输出

首先回顾一下ASCII的知识:

ASCII(American Standarded Code for Information Interchange美国标准信息交换码):用一个字节的除最高位外的七位表示字符,共可表示128种字符的字符集

其中:第032号及第127(34)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等48~57表示阿拉伯数字;65~90表示英文大写字母;97~122表示英文小写字母,

字符              编码的十进制

0                                       48

1                                       48+1

2                                       48+2

x                   48+x

9                                       48+9

由上可以看出,任意一个整数将其每一位加上48即可得到相应字符的ASCII编码

int main()

{

       int m = 456;

       int i = 0;

       int str_0[10] = {0};//缓存

 

       str_0[1] = m/100 +48;

       str_0[2] = (m%100)/10 + 48;

       str_0[3] = m%10 + 48;

      

       for (i = 0; i < 3; i++)

       {

              printf(“%c”, str_0[i]);

       }

       return 0;

}

 

缺点:数据存于整型数组。

              转换不具备通用性。

针对第一点:根据字符与整型数据的一致性改动程序如下:

int main()

{

       int m = 456;

       int i = 0;

       char str_0[10] = “”;//缓存

 

       str_0[1] = m/100 + ‘0’;

       str_0[2] = (m%100)/10 + ‘0’;

       str_0[3] = m%10 + ‘0’;

      

       cout << str_0 << endl;

      

       return 0;

}

第二点:

且看这里

12…..x%10 = (12…..0 + x)%10 = x;

12…xy/10 = (12..x0 + y)/10 = 12…x;

也就是说:

m%10永远等于最后一位

m/10永远等于除最后一位前边所有位

这就给我们构造了一个循环的可能

while(m)

{

       buf[i++] = m%10;

       m = m/10;

}

这样就可以将整数的各个位逆序的存入缓存buf中等待进一步处理

代码如下:

void itoastr( int num, char *str)

{

       char buf[80] = "";

       int iCount = 0;        //循环计数

       char *p = buf;

       char *q = p;

       char *strTmp = str;

       int temp = num < 0 ? -num:num;

       //异常检测

       if (!str)

       {

              return;

       }

       //如果整数为0,直接赋值返回

       if (0 == temp)

       {

              *str = '0';

              return;

       }

       //如果整数为负数,先做符号处理

       else if (0 > num)

       {

              *(strTmp++) = '-';

       }

       //取得整数的各个位逆序存入缓存

       while (temp)

       {

              buf[iCount++] = temp % 10;

              q++;

              temp = temp / 10;

       }

       //从缓存中取得各个位转换成字符正序存入字符数组

       for (; q > p;)

       {

             

              *(strTmp++) = *(--q) + '0';

 

       }

 

       return;

}

int main()

{

 

       int iNum = -123;

       char str[10] = "";

      

       (void)itoastr(iNum, str);

       cout << str << endl;

 

       return 0;

}

这样就完成了一个简单的整数向字符串转换函数

 

原创粉丝点击