cJSON_AddNumberToObject 添加整型数据失败
原因是底层的sprintf 不支持 g参数,比如下面的
double d = item->valuedouble;
sprintf((char*)number_buffer, "%1.17g", d);
但是咱们底层的代码不支持 g,所以这个 函数是失效的,从而导致 cJSON_AddNumberToObject 失败
通俗说法,添加整型数据,就是用 sprintf 把整型添加进去
解决办法,修改下面的函数:
static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer)
{
unsigned char *output_pointer = NULL;
double d = item->valuedouble;
int temp = item->valueint;
int length = 0;
size_t i = 0;
unsigned char number_buffer[26]; /* temporary buffer to print the number into */
unsigned char decimal_point = get_decimal_point();
// double test;
if (output_buffer == NULL)
{
return false;
}
/* This checks for NaN and Infinity */
if ((d * 0) != 0)
{
length = sprintf((char*)number_buffer, "null");
}
else
{
//lierda start qhq
// /* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
// sprintf
// /* Check whether the original double can be recovered */
// if ((sscanf((char*)number_buffer, "%lg", &test) != 1) || ((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", temp);
//lierda end qhq
}
/* sprintf failed or buffer overrun occured */
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;
}
分类:
单片机FreeRTOS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2018-08-25 DSP5509项目之用FFT识别钢琴音调(2)
2018-08-25 DSP5509项目之用FFT识别钢琴音调(1)