文档库 最新最全的文档下载
当前位置:文档库 › 任意进制的转换

任意进制的转换

itoa()函数,10进制转换到(2~36)进制收藏

先看下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类似。

虽然可能itoa无法使用,但是我们可以编写自己的itoa()函数,以下是实现源代码(来源网络):

char*my_itoa(int num,char*str,int radix)

{

const char table[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char*ptr=str;

bool negative=false;

if(num==0)

{

*ptr++='0';

*ptr='\0' ; //别忘了字符串最后要有结束符\0!

return str;

}

if(num<0)

{

*ptr++='-'; //如果num是负数,那么字符串加上‘-’,并将num变成正数。

num*=-1;

negative=true;

}

while(num)

{

*ptr++=table[num%radix];

num/=radix;

}

*ptr='\0';

//如果num是负数,那么字符串加上‘-’,并将num变成正数。

//下面,逆序字符串

char*start=(negative?str+1:str); //现在start的开始点是字符串的head

ptr--; //现在ptr的开始点是字符串的end

while(start

{

char temp=*start;

*start=*ptr;

*ptr=temp;

start++;

ptr--;

}

return str;

}

程序的测试如下:

#include

using namespace std;

int main()

{

int a=15;

char str[100];

my_itoa(a,str,15);

cout<

return 0;

}

对于已经转换到指定进制的数,此时是字符串,我们可以再转换为整型(2~10进制才可以),比如:

int main()

{

int a=15;

char str[100];

int n=atoi(my_itoa(a,str,2));

cout<

return 0;

}

int main()

{

int a=15;

char str[100];

int n=atoi(my_itoa(a,str,2));

cout<

return 0;

}

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

任意进制间的转换(2~36进制)

上次写的2~9进制转换到10进制,因为都是整型的,处理输出输入都比较方便,这次来个比较普遍的。要用数组存储要转换的数字,结果返回整型的十进制数。函数如下:

view plaincopy to clipboardprint?

/************************************************************************/

/* a是要转换的数,bit是原本的进制(2~36)*/

/************************************************************************/

long toTen(char a[],int bit)

{

long i,b=1,sum=0;

int length=strlen(a);

for (i=length-1;i>=0;i--)

{

if (a[i]>='A')

{

sum+=(a[i]-'A'+10)*b;

b*=bit;

}

else

{

sum+=(a[i]-'0')*b;

b*=bit;

}

}

return sum;

}

/************************************************************************/

/* a是要转换的数,bit是原本的进制(2~36)*/

/************************************************************************/

long toTen(char a[],int bit)

{

long i,b=1,sum=0;

int length=strlen(a);

for (i=length-1;i>=0;i--)

{

if (a[i]>='A')

{

sum+=(a[i]-'A'+10)*b;

b*=bit;

}

else

{

sum+=(a[i]-'0')*b;

b*=bit;

}

}

return sum;

}

之前有十进制到任意进制的一个函数,这次有任意进制到十进制的这个函数。于是,可以在任意进制之间进行转换,通过十进制中介。

下面是测试主函数:

int main()

{

int aNum;

char bNum[20];

cin>>aNum;

sprintf(bNum,"%d",aNum); //以整型读入,转换字符串带入函数,进行进制转换cout<

//以字符串读入,直接代入函数,进行进制转换cin>>bNum;

cout<

aNum=toTen("10110",2); //把二进制10110转换为十六进制

itoa(aNum,bNum,16);

cout<

return 0;

}

相关文档