前言
参考了Genven_Liang这位大佬的,
链接如下:https://blog.csdn.net/nanfeibuyi/article/details/80811498
1、为什么要转换
char 我们一般用来定义字符a, b, c之类的,但是你在内存里面不能直接存字母啊,还是要转换为数字进行存储,也就是我们对应的ASCII码
比如,字符a对应 97,字符 b 对应 98
但是我们一般想要的不是这种,比如车牌识别,我识别得到一个字符串”123456“,怎么得到数字123456,这是 char 与 int 转换的目的,反过来也是如此
2、字符串—>整数
2.1、自己写
#include <stdio.h>
int Int_To_Str(char* str)
{
int res = 0;
char flag = '+';
if(*str == '-')
{
str++;
flag = '-';
}
while(*str>='0' && *str<='9')
{
res = (10*res) + (*str++ - '0');
}
if(flag == '-')
res = -res;
return res;
}
int main()
{
char* a = "-2345";
printf("%d", Int_To_Str(a));
}
2.2、使用库函数
itoi函数,<stdlib.h>头文件
函数参数定义
int atoi(const char *nptr);
//字符串转整数函数,nptr: 要转换的字符串
实验:利用atoi函数 字符串转整数
#include<stdio.h>
#include<stdlib.h>
char* a = "123456";
int main()
{
printf("%d\n",atoi(a));
return 0;
}
3、整数—>字符串
3.1、自己写
#include <stdio.h>
char* Str_To_Int(int res)
{
char* str;
int i = 0;
if(res<0)
{
res = -res;
str[i++] = '-';
}
do
{
str[i++] = res%10 + '0';
res = res / 10;
}
while(res);
//上述得到的结果是反的,需要调整位置 1234,4321
int j = 0;
if(str[0]=='-')//如果有负号,负号不用调整
{
j = 1;//从第二位开始调整
++i;//由于有负号,所以交换的对称轴也要后移1位
}
//对称交换
for(;j<i/2;j++)
{
//对称交换两端的值 其实就是省下中间变量交换a+b的值:a=a+b;b=a-b;a=a-b;
str[j] = str[j] + str[i-1-j];
str[i-1-j] = str[j] - str[i-1-j];
str[j] = str[j] - str[i-1-j];
}
str[i] = '\0';
return str;
}
int main()
{
int a = -12789;
printf("%s", Str_To_Int(a));
}
3.2、库函数
itoa函数,<stdlib.h>头文件
函数参数定义
char* itoa(int value, char*string, int radix);
//value: 要转换的整数,
//string: 转换后的字符串,
//radix: 转换进制数,如2,8,10,16 进制等。
实验:利用atoa函数,整数转字符串
#include <stdlib.h>
#include <stdio.h>
int main()
{
int num = 123456;
char str[] = {0};
itoa(num, str, 10);
printf("%s", str);
return 0;
}
``