• itoa()、atoi()、任意进制转换


    头文件:<stdlib.h>
    itoa --功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi

    atoi----功 能: 将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('')才结束转化,并将结果返回(返回转换后的整型数)。
    用 法: int atoi(const char *nptr);


    代码1:itoa  实现任意进制的转换(整形-->字符串)
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    int main(){
    	int number=15;
    	char string[25];
    	itoa(number,string,4);
    	printf("integer=%d string=%s
    ",number,string);
    	itoa(number,string,2);
    	printf("integer=%d string=%s
    ",number,string);
    	itoa(number,string,8);
    	printf("integer=%d string=%s
    ",number,string);
    	itoa(number,string,10);
    	printf("integer=%d string=%s
    ",number,string);
    	itoa(number,string,16);
    	printf("integer=%d string=%s
    ",number,string);
    	return 0;
    }
    <img src="http://img.blog.csdn.net/20150407213001960?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzUzMzI4OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><pre name="code" class="cpp">#include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    int main(){
        int number=16;
        char string[25];
        float n;
        char str[]="12345.67";
        n=atoi(str);
        printf("string=%s  float=%f
    ",str,n);
        return 0;
    }
    


    
    
    <pre name="code" class="cpp">#include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    int main(){
        char a[]="-100";
        char b[]="123";
        int c;
        c=atoi(a)+atoi(b);
        printf("c=%d
    ",c);
        return 0;
    }

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

    代码3:虽然可能itoa无法使用,但是我们可以编写自己的itoa()函数,以下是实现源代码(来源网络):
    
    
    <span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"></span><pre name="code" class="cpp">#include<iostream>
    #include<stdio.h> 
    using namespace std;
    
    char*my_itoa(int num,char*str,int radix){//原数字,存放地址,要转换的转换进制 
        const char table[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
        char*ptr=str ;
        bool negative=false ;
        if(num==0){
            //num=0
            *ptr++='0' ;
            *ptr='/0' ;
            // don`t forget the end of the string is '/0'!!!!!!!!!
            return str ;
        }
        if(num<0){
            //if num is negative ,the add '-'and change num to positive
            *ptr++='-' ;
            num*=-1 ;
            negative=true ;
        }
        while(num){
            *ptr++=table[num%radix];
            num/=radix ;
        }
        *ptr='' ;
        //if num is negative ,the add '-'and change num to positive
        // in the below, we have to converse the string
        char*start=(negative?str+1:str);
        //now start points the head of the string
        ptr--;
        //now prt points the end of the string
        while(start<ptr){
            char temp=*start ;
            *start=*ptr ;
            *ptr=temp ;
            start++;
            ptr--;
        }
        return str ;
    }
    int main(){
    	int a=15;
    	char str[100];
    	my_itoa(a,str,8);
    	printf("%s
    ",str);
    	return 0;
    }

    代码4:任意进制间的转换 (在任意进制之间进行转换,通过十进制中介。)
    
    
    <span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"></span></span><pre name="code" class="cpp">#include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    using namespace std;
    
    long toTen(char a[],int bit){//任意进制到10进制。(a是要转换的数,bit是原本的进制(2~36)----要用数组存储要转换的数字,结果返回整型的十进制数)
    	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<<toTen(bNum,8)<<endl;      //假设原本是8进制,代入函数后返回10进制的数
    	
    	//以字符串读入,直接代入函数,进行进制转换
    	cin>>bNum;
    	cout<<toTen(bNum,2)<<endl;      //假设原本是2进制
    
    	//把二进制10110转换为十六进制
    	aNum=toTen("1111",2);
    	itoa(aNum,bNum,16);
    	cout<<bNum<<endl;
    	return 0;
    }


    
    
  • 相关阅读:
    go 1.14.3安装micro报错处理记录
    关于redis哨兵机制的一些疑问
    TCP中异常关闭的情况记录
    mysql sleep 死锁例子
    ubuntu16.04 安装go
    innodb存储引擎之内存
    ubuntu16.04环境LNMP实现PHP5.6和PHP7.2
    mysql使用存储过程,批量生成测试数据
    mysql 关于字符串搜索的函数
    电脑上的windows键突然失灵了,肿么办
  • 原文地址:https://www.cnblogs.com/u013533289/p/4477272.html
Copyright © 2020-2023  润新知