cJSON中打印64位有符号整型数据
cJSON中打印64位有符号整型数据
·
static cJSON_bool print_number(const cJSON * const item, printbuffer * const output_buffer)
{
unsigned char *output_pointer = NULL;
// double d = item->valuedouble;
long long d = item->valuelonglong;
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
{
/* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
// length = sprintf((char*)number_buffer, "%1.15g", d);
unsigned char number_buffer1[26] = {'\0'};
unsigned char number_buffer2[26] = {'\0'};
if (d >= 0)
{
if ((d >> 32) != 0)
{
sprintf((char*)number_buffer1, "%lu", d / 10000000000);
sprintf((char*)number_buffer2, "%lu", d % 10000000000);
}
else
{
unsigned long long t = 0;
t = 0 - (unsigned long long)d;
if ((t >> 32) != 0)
{
number_buffer1[0] = '-';
length = sprintf((char*)&number_buffer1[1], "%lu", t / 10000000000);
}
if (length == 0)
{
number_buffer2[0] = '-';
sprintf((char*)&number_buffer2[1], "%lu", t % 10000000000);
}
else
{
sprintf((char*)number_buffer2, "%lu", t % 10000000000);
}
}
length = sprintf((char*)number_buffer, "%s%s", number_buffer1, number_buffer2);
// /* 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); */
// }
}
/* 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;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)