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;
}