进制转换

本文参考:http://www.cnblogs.com/applebunny/archive/2012/06/21/2557361.html

先看下itoa()的函数说明:

功能:把一整数转换为字符串

用法:char *itoa(int value, char *string, int radix);

详细解释:itoa是integer to array(将int整型转化为一个字符串,并将值保存在数组string中)的缩写。

参数:value :待转化的整数。

        radix:是基数的意思,即将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。

        *string:保存转换后得到的字符串。

返回值:char *:指向生成的字符串,同*string。

备注:该函数的头文件是“stdlib.h”(包含在iostream里面)

记住一点:itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。 
是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似。

Example

/* sprintf example */
#include <stdio.h>

int main ()
{
  char buffer [50];
  int a=5;
  n=sprintf (buffer, "%d  %o  %x", a, a, a);
  printf ("[%s] is a string \n",buffer);
  return 0;
}

备注:atoi()是标准库里面的函数,在C/C++语言参考函数里面有,而itoa()却没有,对此我们最好自己实现itoa()函数。

虽然可能itoa无法使用,但是我们可以编写自己的itoa()函数,以下是实现源代码:(对原文代码进行了改进)

#include<iostream>
#include<string>

using namespace std;

void itoa0(int num,char *str,int radix)
{
    const char a[]="0123456789abcdefghijklmnopqrstuvwxyz"; // 36个字母, 最多支持36进制
    char ptr[200];
    int len=0;
    unsigned int uNum;
    if (num==0)
    {
        *str++='0';
        *str='\0';
        return;
    }
    else if (num<0)
    {
        if(radix == 2) // 负数的二进制 显示其补码
            uNum = (unsigned int) num;
        else
        {
            *str++='-';
            num *=-1;//绝对值
            uNum = num;
        }
    }
    while (uNum!=0)
    {
        ptr[len++]=a[uNum%radix];
        uNum/=radix;
    }
    for (int i=len-1;i>=0;--i)
    {
        *str++=ptr[i];
    }
    *str='\0';
}

void main()
{
    char result[200];
    int num =-4;
    string str;
    itoa0(num,result,2);
    cout<<result<<endl;
    system("pause");
}

 

posted on 2012-06-24 01:07  没有什么能够阻挡  阅读(288)  评论(0编辑  收藏  举报

导航