You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:27:02