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