JSON数据解析(自写)

自写的JSON解析数据

 

void setup() {
  Serial.begin(115200);

   char chArray[50] = "some characters";
   String str(chArray);
  //           {"ledmode":2,"cr":ff,"cg":00,"cb":234}
  //               2- 9       13-16    22-25  30-33
  String m=  "{\"ledmode\":2,\"cr\":ff,\"cg\":a,\"cb\":1}";
   JsontoString(m,"ledmode");//分割调用
  
    JsontoString(m,"cr");//分割调用
 
     JsontoString(m,"cg");//分割调用
   
      JsontoString(m,"cb");//分割调用
}
 
void loop()
{  
 
}

/*
函数说明: 从Json格式的String中,截取对应键值
输入:  String 数据帧 String 键名
输出:  int 类型的 键值
示例;
  String m=  "{\"ledmode\":2,\"cr\":ff,\"cg\":a,\"cb\":1}";
  int a=JsontoString(m,"ledmode");//分割调用
结果: a=2;
*/
int  JsontoString(String zifuchuan,String fengefu)
 {
  fengefu="\""+fengefu+"\""; 
  int weizhi_KEY; //找查的位置
  int weizhi_DH; 
  String temps;//临时字符串
 weizhi_KEY = zifuchuan.indexOf(fengefu);//找到位置
 temps=zifuchuan.substring( weizhi_KEY+fengefu.length(), zifuchuan.length());//打印取第一个字符
 weizhi_DH = weizhi_KEY+fengefu.length()+ temps.indexOf(',');//找到位置
 if( temps.indexOf(',')==-1){ 
  // weizhi_DH = weizhi_KEY+fengefu.length()+ temps.indexOf('}');//找到位置
 weizhi_DH = zifuchuan.length()-1;
  }
 temps="";
  temps=zifuchuan.substring( weizhi_KEY+fengefu.length()+1,  weizhi_DH);//打印取第一个字符
  Serial.print(temps);
  Serial.print("---");

 return StringtoHex(temps);
  }

/*
说明 String 转 16进制对应的10进制数
输入:  String
输出:  int 
示例:
FF   255
ff   255
1    1
*/
int StringtoHex(String temps)
  {
  int l=0;
  int p=1;
  for (int i = temps.length()-1; i >=0; i--) {
   if(temps[i]=='a'||temps[i]=='b'||temps[i]=='c'||temps[i]=='d'||temps[i]=='e'||temps[i]=='f'){
     l+=((int)(temps[i]-'a')+10)*p;
    p*=16;
   }
   else if(temps[i]=='A'||temps[i]=='B'||temps[i]=='C'||temps[i]=='D'||temps[i]=='E'||temps[i]=='F'){
     l+=((int)(temps[i]-'A')+10)*p;
    p*=16;
   }
   else if(temps[i]=='0'||temps[i]=='1'||temps[i]=='2'||temps[i]=='3'||temps[i]=='4'||temps[i]=='5'||temps[i]=='6'||temps[i]=='7'||temps[i]=='8'||temps[i]=='9')
   {
      l+=(int)(temps[i]-'0')*p;
    p*=16;
    
    }
   
 }
  Serial.println(l);
  return  l;
    
    }
/*
说明 String 转 10进制对应的10进制数
输入:  String
输出:  int 
示例:
1023  1023
1    1
*/
    int StringtoInt(String temps)
  {
  int l=0;
  int p=1;
  for (int i = temps.length()-1; i >=0; i--) {
   if(temps[i]=='0'||temps[i]=='1'||temps[i]=='2'||temps[i]=='3'||temps[i]=='4'||temps[i]=='5'||temps[i]=='6'||temps[i]=='7'||temps[i]=='8'||temps[i]=='9')
   {
      l+=(int)(temps[i]-'0')*p;
    p*=10;
    
    }
   
 }
  Serial.println(l);
  return  l;
    
    }

  

转载于:https://www.cnblogs.com/kekeoutlook/p/9119939.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值