C语言中将char数值转换为int数值的方法

1.char为0-9

当字符为0-9的单一字符,只需在前边加强制转换符号即可得到对应int数值,例如:

//..code
char A = '9';
int B = (int)(A);
printf("%d\n",B);
------>输出结果:9

2.char为一个字符串

当需要的数值为大于9的整数时,例如53,则对应的是字符串"53"转换为int类型的53,不能用强制转换,需要用到stdlib.h中的atoi函数,既字符串转int函数,例如:

//..code
char A = "59";
int B = atoi(A);
printf("%d\n",B);
------->输出结果:59

3.附项目实例代码

项目中是客户端给服务端通过tcp发送一个char类型的字符串,其实是一个数据数组,但是tcp中数据的传输形式默认为字符串,服务端收到数据后,需要对字符串进行整理,提取里面的数据并赋值给本地的uint8_t类型的数组,处理过程如下:

//..code
//传入字符串buf
char buf = "{15,124,0,0,9,24,100,224,106,72,1,33,33,33,17,14,26,46,10,235,2,57,82,99,240,178,227,32,50,48,57,0,247,166,5,34,45,105,248,218,33,127,163,228,241,20,0,65,4,162,115,125,64}"
uint8_t buffer[1024] = {0};//接收用缓存uint8_t数组
char temp[10] = "0";//用来存储字符串中的某一个数据,既atoi的对象
//开始对字符串进行处理
for(int i = 0; i < sizeof(buffer); i++)
{
if(buf[i] == '{')//此判断不允许一个数值里存在多余空格,如105不能写成1 05
{
k = 0;
n = 0;
j = 0;
memset(temp, 0x00, sizeof(temp));
memset(buffer, 0x00, sizeof(buffer)); //..置0
continue;
}
else if(buf[i] != ',' && buf[i] != '}')
{
n += 1;
temp[j] = buf[i];
j += 1;
continue;
}
else if(buf[i] == ',' || buf[i] == '}')
{
n = 0;
j = 0;
uint8_t serv = atoi(temp);//..字符转int
memset(temp, 0x00, sizeof(temp));
buffer[k] = serv;
k += 1;
continue;
}
}
//for循环输出buffer。

注:

1.本例中数组值只能是0-255,因为定义的接收数组的类型为uint8_t,如果需要更大数值,请修改buffer的类型。
2.由于定义buffer时大小为1024个0,输出buffer时前面为需要的数据,后面为0的1024个数据。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容