| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3040 人关注过本帖
标题:VB 进行32位 CRC校验 如何定义无符号LONG型变量 或则有什么变通方式?
只看楼主 加入收藏
huihao5716
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-4-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
VB 进行32位 CRC校验 如何定义无符号LONG型变量 或则有什么变通方式?
各位大神,本人从事嵌入式软件开发,工作中用到了VB开发一个小工具,需要进行32位CRC校验,苦于VB无法定义无符号类型,希望各位大神经验,小弟不胜感激!
C语言有实现,需要在VB 中实现。。。

  u32 User_Make_crc32(u32 crc, u8* buf, u32 len)
搜索更多相关主题的帖子: VB CRC 校验 定义 无符号 
2018-04-11 17:03
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
只要不涉及到 四则运算,就直接用 long ,不用管是否在符号位。

VB6没有左移命令和右移命令,倒是一个很烦的事。随手写了一点代码,自己多调试一下看看。

程序代码:
Public Function 左移1位(x As Long) As Long
Dim y As Long
y = x And &H40000000        '保存次高位
x = x And &H3FFFFFFF        '最高和次高位置0
x = x * 2                   '左移1位        '最高位和次高位置0是防止这步溢出
'移几位是相当于乘 2^(N-1)
If y > 0 Then '次高位需要变到最高位去,只有二种情况,一种=0,一种=&H40000000
    x = x Or &H80000000
End If    
    左移1位 = x
End Function

Public Function 右移1位(x As Long) As Long
Dim y As Long
y = x And &H80000000            '保存最高位
If y < 0 Then                   'X为负数,运算前要把符号位干掉
  x = x And &H7FFFFFFF
End If
x = Int(x / 2)                  '没去测试不使用int函数会不会正确。调用函数开销很大。
If y < 0 Then                   '最高位不为零,则放到次高位上去
    x = x Or &H40000000
End If
右移1位 = x
End Function

授人于鱼,不如授人于渔
早已停用QQ了
2018-04-12 10:07
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
还想到一种移位方法,全部拆成位,保存到数组里,
然后移动数组元素位置。
最后再组合起来。
只使用 位操作 + 循环 ,赋值 命令,不需要四则运算。
对于多位移动可能更快一点,没去写代码。


授人于鱼,不如授人于渔
早已停用QQ了
2018-04-12 10:13
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
If y < 0 Then                   'X为负数,运算前要把符号位干掉
  x = x And &H7FFFFFFF
End If
x = Int(x / 2)                  '没去测试不使用int函数会不会正确。调用函数开销很大。

换成
x= (x And &H7FFFFFFE)/2        '最高位已保存了,所以不用管,直接去掉。同时把最低位置0 ,最低位在向右移时,会被丢失
                               '最低位置零时,被2除时一定能整除,不需要再考虑整除问题

代码执行效率优化真的很难很难想。

授人于鱼,不如授人于渔
早已停用QQ了
2018-04-12 15:22
huihao5716
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-4-11
收藏
得分:0 
回复 3楼 风吹过b
最近没有登录,感谢版主!中心思想是对的,不用管最高位符号位的,直接计算。
2018-05-12 13:47
快速回复:VB 进行32位 CRC校验 如何定义无符号LONG型变量 或则有什么变通方式? ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033417 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved