C 语言char类型与int类型的转化

 

char和int的转换有两种方式,这两种方式适合于在输出时使用

一、char转int

法一:直接转换

最简单的方法就是利用ASSCII码的差值,直接用char的值减去‘0’就行了 eg:char a = '9';int A = a-'0';另一个就是要利用c语言的库函数来解决

ASSCII编码表
二进制十进制十六进制缩写可以显示的表示法名称/意义
0000 0000000无效的空字符(Null)
0000 0001101索氏标题开始
0000 0010202星火本文开始
0000 0011303ETC本文结束
0000 0100404终止时间传输结束
0000 0101505ENQ请求
0000 0110606确认确认回应
0000 0111707比利时响铃
0000 1000808学士学位退格
0000 1001909高温水平定位符号
0000 1010100A低频换行键
0000 1011110B室性心动过速垂直定位符号
0000 1100120℃FF换页键
0000 1101十三0D碳排放归位键
0000 1110140E所以取消变换(Shift out)
0000 1111150F启用变换(Shift in)
0001 00001610分布式LE跳出数据通讯
0001 00011711直流1设备控制一(XON 启用软件速度控制)
0001 00101812直流2设备控制二
0001 001119十三DC3设备控制三(XOFF 停用软件速度控制)
0001 01002014直流4设备控制四
0001 01012115确认失败回应
0001 01102216同步同步用暂停
0001 01112317乙肝疫苗区块传输结束
0001 10002418取消
0001 1001二十五19连接介质中断
0001 1010二十六1A替换
0001 1011二十七1BESC键跳出
0001 1100二十八1CFS文件分割符
0001 1101二十九一维GS组群分隔符
0001 1110三十1E遥感记录分隔符
0001 1111311F我们单元分隔符
0111 11111277楼删除

ASCII可显示字符

二进制十进制十六进制图形
0010 0000三十二20(空格)(␠)
0010 00013321
0010 0010三十四22
0010 0011三十五23#
0010 0100三十六24$
0010 0101三十七二十五
0010 0110三十八二十六&
0010 0111三十九二十七
0010 100040二十八
0010 100141二十九
0010 1010四十二2A*
0010 1011432B+
0010 1100四十四2C
0010 1101四十五二维-
0010 1110四十六2E
0010 1111四十七2F/
0011 0000四十八三十0
0011 000149311
0011 001050三十二2
0011 001151333
0011 010052三十四4
0011 010153三十五5
0011 011054三十六6
0011 011155三十七7
0011 100056三十八8
0011 100157三十九9
0011 1010583A
0011 1011593B
0011 1100603C<
0011 1101613D=
0011 1110623E>
0011 1111633F
0100 00006440@
0100 00016541一个
0100 001066四十二
0100 00116743
0100 010068四十四
0100 010169四十五
0100 011070四十六F
0100 011171四十七
0100 100072四十八
0100 10017349
0100 1010744AJ
0100 1011754B
0100 1100764C大号
0100 1101774D
0100 1110784E
0100 1111794楼
0101 00008050
0101 00018151
0101 00108252R
0101 00118353年代
0101 01008454电视
0101 01018555
0101 01108656V
0101 01118757
0101 10008858
0101 10018959
0101 1010905A
0101 1011915B[
0101 1100925C
0101 1101935D]
0101 1110945E^
0101 1111955F_
0110 00009660`
0110 00019761一个
0110 00109862b
0110 00119963
0110 010010064d
0110 010110165
0110 011010266f
0110 011110367
0110 100010468时长
0110 100110569
0110 10101066A
0110 10111076B
0110 11001086C
0110 11011096D
0110 11101106En
0110 11111116楼
0111 000011270
0111 000111371
0111 001011472r
0111 001111573s
0111 010011674
0111 010111775
0111 011011876v
0111 011111977
0111 100012078
0111 100112179
0111 10101227A
0111 10111237B{
0111 11001247C|
0111 11011257D}
0111 11101267E~

法二:利用库函数转换

(1)字符串转换成数字,用atoi,atol,atof,分别对应的是整型,long型,double

字符str[]=“1234”;
int a=atoi(str);

拖车

功 能: 把字符串转换成整型数,可以将一个字符数组转化为整型
函数说明: atoi()会扫描参数nptr字符串,检测到第一个数字或正负符号时开始做类型转换,之后检测到非数字或结束符 � 时停止转换,返回整型数。
原型: int atoi(const char *nptr);
头文件: #include <stdlib.h>

  #include <stdlib.h>
  #include <stdio.h>

  int main(void)
  {
      int n;
       char *str = "12345.67";
      n = atoi(str);
      printf("string = %s integer = %dn", str, n);
      return 0;
  }

C 语言char类型与int类型的转化-第2张图片-IT技术视界

 

执行结果

字符串 = 12345.67 整数 = 12345

 

二、数字换成字符串

 

1、用sprintf

char str[10];
int a=1234;
sprintf(str,"%d",a);

C 语言char类型与int类型的转化-第2张图片-IT技术视界

2、用库函数

功 能:把一整数转换为字符串
用 法:char *itoa(int value, char *string, int radix);
详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.
参数:
value: 待转化的整数。
radix: 是基数的意思,即先将value转化为radix进制的数,介于2-36,比如10表示10进制
* string: 保存转换后得到的字符串。

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

头文件:"stdlib.h"

#include <stdlib.h>
#include <stdio.h>

int main()
{
    char szDst[1024] = "";
    int nSrc = 123;
    itoa(nSrc, szDst, 10);
    printf("%d 对应的十进制字符串是 %s n", nSrc, szDst);
    itoa(nSrc, szDst, 8);
    printf("%d 对应的八进制字符串是 %s n", nSrc, szDst);
    itoa(nSrc, szDst, 16);
    printf("%d 对应的十六进制字符串是 %s n", nSrc, szDst);
    itoa(nSrc, szDst, 2);
    printf("%d 对应的二进制字符串是 %s n", nSrc, szDst);
    return 0;
}

C 语言char类型与int类型的转化-第2张图片-IT技术视界

当编译器不支持时候就要自己实现,自己实现的函数使用

#include <stdlib.h>
#include <stdio.h>
void  myitoa(int num, char* str, int radix)
{
    int i = 0;
    int sum;
    unsigned int num1 = num;  //如果是负数求补码,必须将他的绝对值放在无符号位中在进行求反码
    char str1[33] = { 0 };
    if (num<0) {              //求出负数的补码
        num = -num;
        num1 = ~num;
        num1 += 1;
    }
    if (num == 0) {             
        str1[i] = '0';
        
        i++;
    }
    while(num1 !=0) {                      //进行进制运算
        sum = num1 % radix;
        str1[i] = (sum > 9) ? (sum - 10) + 'a' : sum + '0';
        num1 = num1 / radix;
        i++;
    }
    i--;
    int j = 0;
    for (i; i >= 0; i--) {               //逆序输出 
        str[i] = str1[j];
        j++;
    }
    
}

int main()
{
    char szDst[1024] = "";
    int nSrc = 123;
    myitoa(nSrc, szDst, 10);
    printf("%d 对应的十进制字符串是 %s n", nSrc, szDst);
    myitoa(nSrc, szDst, 8);
    printf("%d 对应的八进制字符串是 %s n", nSrc, szDst);
    myitoa(nSrc, szDst, 16);
    printf("%d 对应的十六进制字符串是 %s n", nSrc, szDst);
    myitoa(nSrc, szDst, 2);
    printf("%d 对应的二进制字符串是 %s n", nSrc, szDst);
    return 0;
}

C 语言char类型与int类型的转化-第2张图片-IT技术视界

THE END