C语言char类型的123怎么转换成 int类型的123?

串口接受的数据是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);