c json保存整型数组_cjson源代码解读(三) 解析字符串、数字、数组、对象

本文详细解读了cJSON库中解析数字、字符串、数组和对象的源代码,包括数字的正负判断、科学计数法处理、字符串的转义字符解析、数组和对象的构建等关键步骤。
摘要由CSDN通过智能技术生成

1.  解析数字

static const char *parse_number(cJSON *item,const char *num)

{

double n=0,sign=1,scale=0;int subscale=0,signsubscale=1;

if (*num=='-') sign=-1,num++;/* Has sign? */

if (*num=='0') num++;/* is zero */

if (*num>='1' && *num<='9')don=(n*10.0)+(*num++ -'0');while (*num>='0' && *num<='9');/* Number? */

if (*num=='.' && num[1]>='0' && num[1]<='9') {num++;don=(n*10.0)+(*num++ -'0'),scale--; while (*num>='0' && *num<='9');}/* Fractional part? */

if (*num=='e' || *num=='E')/* Exponent? */

{num++;if (*num=='+') num++;else if (*num=='-') signsubscale=-1,num++;/* With sign? */

while (*num>='0' && *num<='9') subscale=(subscale*10)+(*num++ - '0');/* Number? */

}

n=sign*n*pow(10.0,(scale+subscale*signsubscale));/* number = +/- number.fraction * 10^+/- exponent */

item->valuedouble=n;

item->valueint=(int)n;

item->type=cJSON_Number;

return num;

}

item是传进来的cjson object, num是起始数字。

1. 解析正负, 用sign 标记, -1 是负

2. 判断是不是0

3. 判断小数点前面的数字, 也就是 - 3.2 e 5  , 前面的3.2, 这个分为两部分, 小数点前和后

4. e或者E,即科学计数的后半部分, 这个时候需要处理一下科学计数的部分是不是正或者负的问题, 用signsubscale 记录。

5. 然后直接解析, 这里作者用了个小技巧,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值