3. 数值解析
3. 数值解析
章节目录
先来设计函数声明, 就第二节说的: static int __parse_json_number(const char* cursor, const char** end, double* num)
解析数值的步骤很简单, 我们可以直接调用标准库中的double strtod(const char *nptr, char **endptr);
进行处理, 返回值double刚好就是我们想要的.
但是在调用这个函数之前需要进行一系列的判断, 因为JSON标准对数值有一定的要求.
直接上代码
static int __parse_json_number(const char *cursor, const char **end, double *num)
{
const char *p = cursor;
if (*p == '-')
{
p++;
}
if (*p == '0' && (isdigit(p[1]) || p[1] == 'X' || p[1] == 'x'))
{
return -2;
}
*num = strtod(cursor, (char **)end);
if (cursor == *end)
{
return -2;
}
return 0;
}
首先第一个字符如果是负号-
, ++继续判断下一个字符
当前字符为'0'
, 且
- 下一个字符为十进制数, 表示当前数值为八进制, 不允许, 返回错误.
- 下一个字符为X或x, 表示当前数值为十六进制, 不允许, 返回错误.
最后将cursor直接转为double, 如果转换失败, 则返回错误, 成功则退出.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix