C语言中如何从char数组中拆分提取指定字段数据?
拆分实现方案
首先修正你的变量定义错误:char是单字符类型,无法存储字符串序列,你需要先修正定义为字符串数组:char rcv_str[] = "1001ff";,以下是基于该修正后的实现方案:
- 方案1:直接格式化读取(最简实现)
直接使用sscanf指定读取宽度即可完成拆分和类型转换,适合固定长度的字符串拆分场景:
运行后#include <stdio.h> int main() { char rcv_str[] = "1001ff"; int id, sts; // 按2位宽度逐段读取十进制数值 sscanf(rcv_str, "%2d%2d", &id, &sts); // 若需读取十六进制数值,替换为 sscanf(rcv_str, "%2x%2x", &id, &sts); return 0; }id值为10,sts值为1,完全符合需求。 - 方案2:手动截取子串转换
如果你需要更灵活的控制拆分位置,可手动截取指定位置的子串后再转数值:#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char rcv_str[] = "1001ff"; int id, sts; char buf[3] = {0}; // 存储2位字符+字符串结束符 // 拆分id:截取前2位 strncpy(buf, rcv_str, 2); id = atoi(buf); // 拆分sts:从下标2开始截取2位 strncpy(buf, rcv_str + 2, 2); sts = atoi(buf); return 0; }
特殊情况说明:如果你的
rcv_str实际存储的是二进制字节流而非ASCII字符串,比如对应数值为0x1001ff的整数,可直接通过位运算拆分:unsigned int rcv_data = 0x1001ff; unsigned char id = (rcv_data >> 16) & 0xff; unsigned char sts = (rcv_data >> 8) & 0xff;
内容的提问来源于stack exchange,提问作者isbrun
相关产品推荐
相关产品推荐

