串口接受的数据是char类型的a ,要怎么转换为int类型并且值不变。
例如:
char* a;
int b;
*a=SBUF; //假如接收到的a的值是123 (也就是a=“123”也就是16进制的0x31 0X32 0X33 )
/**
*
*这里要怎么写,其他能达到同样效果的方法也行
*
**/
b=a; //此时b的值也是123
c语言中每个字符再ASll表上都有自己的值,这个值 - '0'后就是这个字符对应的整数
所以c语言字符串转换成整数可以将字符存进字符数组里,逐个进行 -'0'的操作并按照位数乘10加起来得到对应整数
#include <stdio.h>
#include <math.h>
int main()
{
int i; int b = 0;
int sum = 0; int len; // len表示数组长度
int n;
char a[3] = {'1','2','3'}; // 修改程序仅需修改这一步,可以改成for循环输入想要的字符
// 逆序对字符数组中的元素操作,sizeof(a)/sizeof(a[0])可得到字符数组长度
len = sizeof(a)/sizeof(a[0]);
n = len -1; // 此时len为3时n为2,刚好对应要乘的位数
for(i = 0; i < len; i++){
b = a[i] - '0'; // 得出每个字符对应的整数
b *= pow(10, n); // 按照位数乘以10的n次方,pow在头文件math.h中,是进行次方运算的函数
n -= 1;
sum += b;
}
printf("%d", sum);
return 0;
}
char ch[] = "123";
int x = atoi(ch);