当前位置: 首页 > wzjs >正文

网站建设文化哪家好网站如何申请域名

网站建设文化哪家好,网站如何申请域名,仿素材网站,杭州事件最新消息新闻9.7 cbExiGen库bug及改进 上一节作者改进了cjson库,成功的支持64位整数的解析和输出,但是在测试SessionSetupRes命令时,发现解码输出的时间戳仍然是乱码,说明 cbExigen库代码存在解码错误。本节作者分析了bug原因,提出…

9.7 cbExiGen库bug及改进

上一节作者改进了cjson库,成功的支持64位整数的解析和输出,但是在测试SessionSetupRes命令时,发现解码输出的时间戳仍然是乱码,说明 cbExigen库代码存在解码错误。本节作者分析了bug原因,提出了修改方案。 同时在github上提交这个bug,官方已经接受并且修复啦。

测试数据:

充电桩ISO15118-2协议的SessionSetupRes命令实例: 我故意把时间戳数据写成了这么长19位。

{"V2G_Message": {"Header": {"SessionID": "C08CDF36985A7190"},"Body": {"SessionSetupRes": {"ResponseCode": "OK_NewSessionEstablished","EVSEID": "UK123E1234","EVSETimeStamp": 1234567890123456789}}}
}

该命令对应的schema规范中定义了EVSETimeStamp的具体类型位long,因此必须要用到int64类型解析。

<xs:element name="EVSETimeStamp" type="xs:long" minOccurs="0"/>

代码运行后编码成功,解码成功,但是解码后的EVSETimeStamp并不是1234567890123456789,明显的是一个乱数字,长度也被截断了。怀疑是内部解码错误,跟踪代码发现了错误位置和原因。

代码:exi_basetypes.c,  把字节数组转换成64位长整数

int exi_basetypes_convert_64_from_unsigned(exi_unsigned_t* exi_unsigned, uint64_t* value)
{if (exi_unsigned->octets_count > EXI_BASETYPES_UINT64_MAX_OCTETS){return EXI_ERROR__OCTET_COUNT_LARGER_THAN_TYPE_SUPPORTS;}uint8_t* current_octet = exi_unsigned->octets;*value = 0;for (size_t n = 0; n < exi_unsigned->octets_count; n++){  //fix bug:  overflow of int,  Forced Typecasting to uint64_t,  Tom.hongtao.gao*value = (uint64_t)(*value + ((*current_octet & EXI_BASETYPES_OCTET_SEQ_VALUE_MASK) << (n * 7)));          current_octet++;}return EXI_ERROR__NO_ERROR;
}

上面转换思路:

每个字节去除最高位,然后左移7位,累加求和。

循环读取每个字节,直到数组结束。这样最后的和就是长整型数。

【错误原因】:在移位操作时,左边的操作数 (*current_octet & EXI_BASETYPES_OCTET_SEQ_VALUE_MASK) 默认类型是int类型,当连续操作到第6个字节时,该数字已经连续左移36位了,已经超过了32位整数的范围了,所以发生整数溢出。

【解决方法】:对移位的操作数强制类型转换,添加(uint64_t) 解决了溢出问题。

    for (size_t n = 0; n < exi_unsigned->octets_count; n++){   //fix bug:  overflow of int,  Forced Typecasting to uint64_t,  Tom.hongtao.gao//*value = (uint64_t)(*value + ((*current_octet & EXI_BASETYPES_OCTET_SEQ_VALUE_MASK) << (n * 7)));    *value = (uint64_t)(*value + ((uint64_t)(*current_octet & EXI_BASETYPES_OCTET_SEQ_VALUE_MASK) << (n * 7))); current_octet++;}

之后再用代码测试OK,解码出的数据能正确显示出1234567890123456789这个数字了。

json格式化后:
{"V2G_Message":  {"Header":       {"SessionID":    "C08CDF36985A7190"},"Body": {"SessionSetupRes":      {"ResponseCode": "OK_NewSessionEstablished","EVSEID":       "UK123E1234","EVSETimeStamp":        1234567890123456789}}}
}lret = 0, timeStamp=1234567890123456789
1111 SessionSetupRes.EVSETimeStamp=1234567890123456789
ret1= 0
stream.byte_pos =34
dataRes (35 bytes):
+------------------------------------------------------------------------------+
| Offset  : 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF |
+------------------------------------------------------------------------------+
| 00000000: 80 98 02 30 23 37 CD A6 16 9C 64 11 E0 20 31 55   ...0#7....d.. 1U |
| 00000010: 2C C4 C8 CD 14 C4 C8 CC D0 12 B0 54 DD F8 F3 D0   ,..........T.... |
| 00000020: 92 22 20                                          ."               |
+------------------------------------------------------------------------------+
ret2= 0
2222, timeStamp=1234567890123456789
root: {"V2G_Message":  {"Header":       {"SessionID":    "C08CDF36985A7190"},"Body": {"SessionSetupRes":      {"ResponseCode": "OK_NewSessionEstablished","EVSEID":       "UK123E1234","EVSETimeStamp":        1234567890123456789}}}
}tom@Tom-Hongtao:/mnt/c/e/codes/cbexigen-TestFrame$


文章转载自:

http://3rNnpPQO.Lmhwm.cn
http://UIfLjjaZ.Lmhwm.cn
http://xKVqmSQS.Lmhwm.cn
http://RyoOCAPU.Lmhwm.cn
http://ktRnuWVB.Lmhwm.cn
http://4oK7Yzlx.Lmhwm.cn
http://tliRowC4.Lmhwm.cn
http://aMZIpfAu.Lmhwm.cn
http://qxo8sGkI.Lmhwm.cn
http://PaXohXmN.Lmhwm.cn
http://caIINwQT.Lmhwm.cn
http://nofgJgXT.Lmhwm.cn
http://RjSCnszc.Lmhwm.cn
http://gzgaxav5.Lmhwm.cn
http://NNHb6Ps5.Lmhwm.cn
http://NBYG4nf1.Lmhwm.cn
http://qzDmEvZQ.Lmhwm.cn
http://V8kX7QSj.Lmhwm.cn
http://8kaqC04b.Lmhwm.cn
http://8Ccwcp0Z.Lmhwm.cn
http://ZzwcPt3f.Lmhwm.cn
http://cdkNcZUS.Lmhwm.cn
http://Hw4L9V4O.Lmhwm.cn
http://57WoRxuA.Lmhwm.cn
http://zCreEW7G.Lmhwm.cn
http://3kn8uocU.Lmhwm.cn
http://Yte0Tnei.Lmhwm.cn
http://DAUArkNK.Lmhwm.cn
http://sQH7fiYP.Lmhwm.cn
http://lJbmVnGx.Lmhwm.cn
http://www.dtcms.com/wzjs/763781.html

相关文章:

  • h5动画网站单产品网站建设
  • 奇趣网做网站爬虫怎么看网站开发者模式
  • 网站开发时如何设计英文版本aaa免费服务器
  • 青岛专业公司网站设计徐州网站制作怎么做
  • 自做网站打开速度慢群辉 wordpress 外网
  • 网站备案类型及条件wordpress替换公共js
  • 深圳做网站(信科网络)温州网站制作价格
  • 北京网站建设方案报价做网站背景图片怎么放
  • 企业备案的网站名称wordpress做网站怎么样
  • 自己电脑做网站还用备案河海大学土木专业类建设网站
  • 做网站主流网站网页设计去除下划线代码
  • 做cpa怎么建立自己网站淘宝店铺买卖交易平台
  • 网站开发的著作权归谁interidea 做网站
  • 做网站和优化共多少钱精英学校老师给学生做的网站
  • 企业建设网站没有服务器弄宽带要多少钱
  • 网站网站建设平台小公司网站模版
  • 网站建设的目的只是开展网络营销小公司建网站 优帮云
  • 视频素材网站推荐贵阳商城网站建设
  • 如何部署asp网站哪些网站怎么进
  • 哪个网站的图片专门做详情页的做网站的第一步
  • 北京网站建设一条龙网络推广引流软件
  • 网站设计方案及报价单教师个人网站建设
  • 个人制作网站谷歌网站提交
  • 地方网站盈利模式怀化公司网站建设
  • 网站整体迁移该怎么做动画制作学什么专业
  • 西安网站建设wordpress免费文章采集器
  • 南京软月网站建设公司重庆市建设工程信息网招标文件
  • 进入网站自动全屏怎么做2017网站发展趋势
  • 站长统计app进入网址新版小猪多语种外贸网站建设
  • 郑州网站优化排名郑州网站推广排名公司