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

 

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

一、char转int

法一:直接转换

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

ASSCII编码表
二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义
0000 0000 0 00 无效的 ␀ 空字符(Null)
0000 0001 1 01 索氏 ␁ 标题开始
0000 0010 2 02 星火 ␂ 本文开始
0000 0011 3 03 ETC ␃ 本文结束
0000 0100 4 04 终止时间 ␄ 传输结束
0000 0101 5 05 ENQ ␅ 请求
0000 0110 6 06 确认 ␆ 确认回应
0000 0111 7 07 比利时 ␇ 响铃
0000 1000 8 08 学士学位 ␈ 退格
0000 1001 9 09 高温 ␉ 水平定位符号
0000 1010 10 0A 低频 ␊ 换行键
0000 1011 11 0B 室性心动过速 ␋ 垂直定位符号
0000 1100 12 0℃ FF ␌ 换页键
0000 1101 十三 0D 碳排放 ␍ 归位键
0000 1110 14 0E 所以 ␎ 取消变换(Shift out)
0000 1111 15 0F 和 ␏ 启用变换(Shift in)
0001 0000 16 10 分布式LE ␐ 跳出数据通讯
0001 0001 17 11 直流1 ␑ 设备控制一(XON 启用软件速度控制)
0001 0010 18 12 直流2 ␒ 设备控制二
0001 0011 19 十三 DC3 ␓ 设备控制三(XOFF 停用软件速度控制)
0001 0100 20 14 直流4 ␔ 设备控制四
0001 0101 21 15 想 ␕ 确认失败回应
0001 0110 22 16 同步 ␖ 同步用暂停
0001 0111 23 17 乙肝疫苗 ␗ 区块传输结束
0001 1000 24 18 能 ␘ 取消
0001 1001 二十五 19 在 ␙ 连接介质中断
0001 1010 二十六 1A 子 ␚ 替换
0001 1011 二十七 1B ESC键 ␛ 跳出
0001 1100 二十八 1C FS ␜ 文件分割符
0001 1101 二十九 一维 GS ␝ 组群分隔符
0001 1110 三十 1E 遥感 ␞ 记录分隔符
0001 1111 31 1F 我们 ␟ 单元分隔符
0111 1111 127 7楼 的 ␡ 删除

ASCII可显示字符

二进制 十进制 十六进制 图形
0010 0000 三十二 20 (空格)(␠)
0010 0001 33 21 !
0010 0010 三十四 22 “
0010 0011 三十五 23 #
0010 0100 三十六 24 $
0010 0101 三十七 二十五 %
0010 0110 三十八 二十六 &
0010 0111 三十九 二十七 ‘
0010 1000 40 二十八 (
0010 1001 41 二十九 )
0010 1010 四十二 2A *
0010 1011 43 2B +
0010 1100 四十四 2C ,
0010 1101 四十五 二维 -
0010 1110 四十六 2E 。
0010 1111 四十七 2F /
0011 0000 四十八 三十 0
0011 0001 49 31 1
0011 0010 50 三十二 2
0011 0011 51 33 3
0011 0100 52 三十四 4
0011 0101 53 三十五 5
0011 0110 54 三十六 6
0011 0111 55 三十七 7
0011 1000 56 三十八 8
0011 1001 57 三十九 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?
0100 0000 64 40 @
0100 0001 65 41 一个
0100 0010 66 四十二 乙
0100 0011 67 43 碳
0100 0100 68 四十四 德
0100 0101 69 四十五 和
0100 0110 70 四十六 F
0100 0111 71 四十七 格
0100 1000 72 四十八 赫
0100 1001 73 49 我
0100 1010 74 4A J
0100 1011 75 4B 钾
0100 1100 76 4C 大号
0100 1101 77 4D 米
0100 1110 78 4E 否
0100 1111 79 4楼 这
0101 0000 80 50 磷
0101 0001 81 51 问
0101 0010 82 52 R
0101 0011 83 53 年代
0101 0100 84 54 电视
0101 0101 85 55 在
0101 0110 86 56 V
0101 0111 87 57 在
0101 1000 88 58 十
0101 1001 89 59 和
0101 1010 90 5A 和
0101 1011 91 5B [
0101 1100 92 5C
0101 1101 93 5D ]
0101 1110 94 5E ^
0101 1111 95 5F _
0110 0000 96 60 `
0110 0001 97 61 一个
0110 0010 98 62 b
0110 0011 99 63 丙
0110 0100 100 64 d
0110 0101 101 65 和
0110 0110 102 66 f
0110 0111 103 67 克
0110 1000 104 68 时长
0110 1001 105 69 我
0110 1010 106 6A 杰
0110 1011 107 6B 钾
0110 1100 108 6C 升
0110 1101 109 6D 米
0110 1110 110 6E n
0110 1111 111 6楼 这
0111 0000 112 70 页
0111 0001 113 71 问
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 吨
0111 0101 117 75 在
0111 0110 118 76 v
0111 0111 119 77 在
0111 1000 120 78 十
0111 1001 121 79 和
0111 1010 122 7A 和
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~

法二:利用库函数转换

(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