ESP8266,增加cJSON_AddNumberToObject 后,cJSON_Print输出NULL

news/2024/10/15 15:55:42/

1. cJSON_Print > print > print_value > print_number

这个函数中,使用的是double d = item->valuedouble; 进行处理判断,
因为ESP8266应用不使用浮点数,所以直接改成使用 item->valueint 进行判断

2. 修改后的代码

/* Render the number nicely from the given item into a string. */
static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer)
{unsigned char *output_pointer = NULL;
//    double d = item->valuedouble;int d = item->valueint;int length = 0;size_t i = 0;unsigned char number_buffer[26] = {0}; /* temporary buffer to print the number into */unsigned char decimal_point = get_decimal_point();
//    double test = 0.0;if (output_buffer == NULL){return false;}/* This checks for NaN and Infinity */
//    if (isnan(d) || isinf(d))
//    {
//        length = sprintf((char*)number_buffer, "null");
//    }
//    else
//    {
//        /* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
//        length = sprintf((char*)number_buffer, "%1.15g", d);
//
//        /* Check whether the original double can be recovered */
//        if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || !compare_double((double)test, d))
//        {
//            /* If not, print with 17 decimal places of precision */
//            length = sprintf((char*)number_buffer, "%1.17g", d);
//        }
//    }length = sprintf((char*)number_buffer, "%d", d);/* sprintf failed or buffer overrun occurred */if ((length < 0) || (length > (int)(sizeof(number_buffer) - 1))){return false;}/* reserve appropriate space in the output */output_pointer = ensure(output_buffer, (size_t)length + sizeof(""));if (output_pointer == NULL){return false;}/* copy the printed number to the output and replace locale* dependent decimal point with '.' */for (i = 0; i < ((size_t)length); i++){if (number_buffer[i] == decimal_point){output_pointer[i] = '.';continue;}output_pointer[i] = number_buffer[i];}output_pointer[i] = '\0';output_buffer->offset += (size_t)length;return true;
}

http://www.ppmy.cn/news/1538272.html

相关文章

Mybatis Plus 查看组装的SQL条件的办法

Mybatis Plus 查看组装的SQL条件的办法&#xff1a; 1、日志配置为 trace模式开启数据库语句打印 比喻&#xff1a;在logback.xml里配置 <logger name"com.hieasy.*.mapper" level"TRACE" /> 但是这个开启后日志内容太多&#xff0c;查找与定位较为…

前端开发笔记--html 黑马程序员1

文章目录 前端开发工具--VsCode前端开发基础语法VsCode优秀插件Chinese --中文插件Auto Rename Tag --自动重命名插件open in browserOpen in Default BrowserOpen in Other Browser Live Server -- 实时预览 前端开发工具–VsCode 轻量级与快速启动 快速加载&#xff1a;VSCo…

云计算ftp 服务器实验

创建VLAN 10 划分端口 创建VLAN 10 的地址 10.1.1.1 服务器的地址是 10.1.1.2 这是服务上的配置 服务器上选择ftp 启动 &#xff0c;文件目录选择一下 在 交换机上 ftp 10.1.1.2 服务器的地址 把刚才创建的shenyq txt 文件下载下到本地交换机 我们能看到交换…

《Java基础》变量和数据类型

综述 在开始学习变量之前&#xff0c;我们思考一下为什么需要使用变量。 首先我们从小开始学习加法减法的时候&#xff0c;后来我们再学更难的东西就是代数&#xff0c;其中的x和y是我们要求解的内容&#xff0c;这些内容就是变量。 变量是人的思维的提升&#xff0c;没有变量…

Java基础入门:从人机交互到Java核心概述

掌握CMD与Java开发环境&#xff1a;从基础到实战的全面指南 在当今数字化时代&#xff0c;计算机操作和编程技能已成为不可或缺的基础能力。无论你是刚刚迈入编程世界的新手&#xff0c;还是希望提升自己技术水平的开发者&#xff0c;了解如何高效使用命令行工具&#xff08;如…

小程序该如何上架

小程序的上架流程通常包括准备工作、代码审核、人工审核以及上线发布等关键步骤。以下是一个详细的小程序上架指南&#xff1a; 一、准备工作 注册开发者账号&#xff1a; 在微信小程序平台或支付宝开放平台等相应的小程序发布平台上注册开发者账号。 开发小程序&#xff1a; …

STM32的USART技术介绍

USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff0c;通用同步/异步收发传输器&#xff09;是STM32微控制器中常用的串行通信接口之一。它支持同步和异步通信模式&#xff0c;广泛应用于各种数据传输场景&#xff0c;如串口通信、GPS模块连接…

在 Anaconda 中创建虚拟环境

1. 在任务栏里点击“开始”图标&#xff0c;点击“所有应用”&#xff0c;在“A”下面找到“Anaconda3(64-bit)”&#xff0c;然后打开这个文件夹&#xff0c;找到“Anaconda Navigator”并打开。 2. 打开“Anaconda Navigator”之后&#xff0c;在左侧列表找到“Environments…