码迷,mamicode.com
首页 > Web开发 > 详细

JsonCpp读取较大数字出错问题

时间:2014-06-27 20:36:51      阅读:1935      评论:0      收藏:0      [点我收藏+]

标签:winform   style   class   blog   code   java   

  JsonCpp是c++中解析Json常用的解析库。在项目开发中,服务端如果用的是java的话都会是以JSON格式进行传输,客户端使用c++的话都会用到JsonCpp。看看下面这个问题:

   json字串:{"@type":"Login","messageType":"Login","sendTime":1403575350411,"receivedTime":0,"loginId":"linzm","password":"123456","messageClientType":"WinForm"}

  解析代码: 

 

 1   Json::Reader reader;
 2   Json::Value root;
 3   if (reader.parse(str, root))
 4       {
 5          //获取里面内容
 6           OutputDebugString(_T("STRING TO JSON \n"));
 7          //std::string str1 = root["messageType"].asString();
 8          long long tmstamp = ((long long)(root["sendTime"].asUInt()))/1000;
 9  
10        WCHAR* wstr = NULL;
11       TimestampToLocalTime(&wstr,tmstamp);
12     }

 

结果发现第8行会出错,查了下错误原因, 原来SendTime是一个一毫秒为单位的时间戳,其值为1403575350411,这个值的大小远远超出了 unsigned int 或者 int的最大值,只能用INT64来表示, 但是看看Json::Value里面的函数只有asInt, asUint,没有取64位整数的函数,那怎么办呢?里面虽然没有64位的但是有一个asDouble,duoble的指数为11位,能表示的范围比Int64还大,所以上面的asUInt换成asDouble就可以了。

JsonCpp读取较大数字出错问题,布布扣,bubuko.com

JsonCpp读取较大数字出错问题

标签:winform   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/just-bg/p/3809550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!