目录
一、概要
问题:如何将一组字符串数据包的有效位提取出来,并转为整型数据存储到一个新的字符数组中?比如一组字符串为:"$-1-111-222-111-#"($、#分别是数据包的起始位和结束标志位,‘-’是数据包的分隔符,1、111、222、111是数据包的有效数据,并且每一组的大小为一个字节0-255)提取1、111、222、111四组数据存储到OUT_DATE数组中。
二、程序设计流程
1.设计思路
先遍历原始数据包的每个字符,然后截取两个分隔符之间的的字符,再将这些字符进行字符转整型处理,最后存储到目标数组中即可。
2.参考代码
void convertData(char* input, uint8_t* out)
{
int outputIndex = 0,W=0; // 指向输出数组的当前索引、和位数值
// 遍历输入字符串
for (int i = 0; input[i] != '#'; i++) //处理整个数据包
{
char c = input[i];
if (c =='-') //遇到‘-’先判断-后面有多少位是数字
{
if(input[i+2]=='-')
{W=1;}
else if(input[i+3]=='-')
{W=2;}
else if(input[i+4]=='-')
{W=3;}
else break;//在该范围-。。。-内没有检测到下一下个-,就退出转换。
switch(W)//字符转整型处理。比如该组就1位数据‘1’,就执行‘1’-‘0’,这样就计算出该组的整型数据了。
{
case 1:out[outputIndex]=input[i+1]-'0';
break;
case 2:out[outputIndex]=(input[i+1]-'0')*10+(input[i+2]-'0');
break;
case 3:out[outputIndex]=(input[i+1]-'0')*100+(input[i+2]-'0')*10+
(input[i+3]-'0');
break;
}
outputIndex++;
if(outputIndex>4)
outputIndex=0;
}
}
}
三、运行结果
四、小结
在这里大家可能会有些疑问,为什么不能直接使用原始数据?其实原始数据它是一组字符串,就是它每个字符都是单独的存储起来的,也就是说这些数据是离散的,如果对它进行数据读取时,会出现它跟我们发送的数据不一致的情况。因此我们需要将这些数据进行整和起来,与我们发送的内容一致,这样我们就能实现对这些数据的准确读取了。