cJSON详细剖析(七)----print_value()函数

10 篇文章 0 订阅

从 剖析 五 我们可以发现,value()函数里面的print_number()函数以及print_array()函数应该是比较简单的函数。如下图,在剖析四里面,我们分析了print_object()函数,虽然没有分析print_string()函数,当时其调用的都是同一个函数print_string_ptr()。下面我们把另外俩也分析了。

print_number()函数

这个函数涉及的知识点还是挺多的我们一步步来分析。函数如下:

我们先分析第一个else  if,如下图。上面三个是在c库里面定义,DBL_EPSILON表示是最小的正数INT_MAX, INT_MIN表示是最大的int值和最小的int值。这里相当于用来判断item里面存储的是不是一个int型的正整数。

sprintf()把格式化的数据写入字符串str,如下图(来自百度百科)。所以这里的意思是,把item->valueint数字转化为str字符串。这里我发现百度百科讲的特别详细,想仔细了解的可以去看看。

接下来,我们分析后一个else语句,我在图中对一代码中的输出格式进行了解释,

绿色框中指的是这个数如果是一个大于INT_MAX的整数就输出为整数保存在str中,紫色框中的部分表示的是如果这个数是一个很小的数或者大于10^9,则以科学技术阀保存在str中,最后一个就和上一个相反了。最后返回str字符串。

print_array()函数

啊,居然有80行,我尼玛,我还以为很短的啊,开始吧...

我们分析else部分,大抵意思应该挺明显的,就是把链表中的每个结点的里的元素存储在entries中。

按逻辑分析,下面这个也很好理解了,就是将所有的字符串串成一个整的字符串,包括中括号,逗号等符号。其实这样也就分析完了。在细枝末节的东西就不扣了,也都是一些比较基本的东西,包括出错的处理了等等。

总结

print_value()函数算是讲完了,讲的不是很细,只是把大体的思路理清楚,c语言功底扎实的话,估计很快就能理解。到这里的话,doit(char *text)函数也就差不多讲完了,太小看cJSON的五百行,平常我们写代码,五六行的量在这居然压缩成了一行的量。我还居然很喜欢这这种风格,这样看起来还舒服些。拉老长看得也费劲,看了后面的还要拉上进步条才能看前面的,太费劲。对了,最后安利大家一个截图软件Snipaste,真是谁用谁知道啊,巨好用。特别是看代码的时候,需要多次跳转时,看了后面的前面的,可以统统截图下来一起看看,哈哈哈。到此结束,告辞!

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值