VB 6.0和VB.NET 2005实现CRC算法在位运算及数据类型方面的差异

项目要用到CRC校验,和硬件设备进行串口通信

原本做硬件部分的开发团队用VB6写过一个CRC算法,我们开始的时候就按照VB的代码直接翻译过来,发现校验总是通不过

后来注意到VB6和VB.NET的数据类型不一致(之前没用过VB6),于是在VB.NET代码中就修正数据类型为Short

发现得到的结果还是不对,而且会发生数据溢出错误

找了两三天,到最后安装上VS 6.0运行原来的VB6程序,一步步跟踪比较两个程序的差异

才发现算法中有一个Xor操作的结果超出VB.NET中Short数据类型的最大值(对应VB6中Integer类型)

而在VB6中却没有类似问题

 

应该是Xor操作的结果是整型的,在VB6中刚好16位没问题,而在VB.NET中还按整型处理就是一个大于32767的数,而不是意想中的表示成负数的Short类型

 

最后的处理方法是首先用整型的数值获得Xor操作的结果,判断如果不大于32767就直接赋值给Short型变量,否则变成负数(减去65536)后赋值给Short型变量

搞定,^_^ 

转载于:https://www.cnblogs.com/myriadstones/archive/2009/06/10/VBXorIssue.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值