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

关注IT技术视界公众号,获取好玩有趣软件! 先领1T空间!再存有趣资源!仅有一次机会!

 

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