VB通信中CRC校验的问题---------- 请(暴风雨 v2.0)高手给看看,在线等!!!!!!!

jinhailv 2005-11-10 09:48:47
我在做与下位串口R232通讯的程序时,需要将含有6位十六进制数据的字符串(例:01 04 05 0f 0f 0f)通过CRC校验后生成两位CRC校验码(一位高字节X和一位低字节Y)后,组成一个8位十六进制数据的字符串(01 04 05 0f 0f 0f X Y)发送给下位通讯.请各位高手帮忙看看,谢谢!!!!!!!!!
附:我这里有一个下位用C编写的CRC校验程序
unsigned msrCRC(unsigned char *pcMess, unsigned wLen) //*pcMess 字符数组

{

long MSBInfo;
int i,j ;
unsigned nCRCData;

nCRCData = 0xffff;
for(i = 0; i < wLen;i++)
{
nCRCData = nCRCData ^ pcMess[i] ;
for(j= 0 ; j < 8 ;j ++)
{
MSBInfo = nCRCData & 0x0001;
nCRCData = nCRCData >> 1;
if(MSBInfo != 0 )
nCRCData = nCRCData ^ 0xa001;
}
}
return nCRCData;
}
请教在VB中上述程序如何实现.
...全文
241 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘洪峰AIoT 2005-11-19
  • 打赏
  • 举报
回复
记得要初始化数组:
'-------------------------------------------
'初始化CRC16校验值
Dim strCRCHTemp() As String
Dim strCRCLTemp() As String
Dim i As Integer
strCRCHTemp = Split(strCRC16H, ",")
strCRCLTemp = Split(strCRC16L, ",")
For i = 0 To 255
bytCRC16H(i) = Val("&h" & strCRCHTemp(i))
bytCRC16L(i) = Val("&h" & strCRCLTemp(i))
Next
刘洪峰AIoT 2005-11-19
  • 打赏
  • 举报
回复
'-------------------------------------------------------
'CRC16校验高位预存值
Public bytCRC16H(0 To 255) As Byte
Public Const strCRC16H As String = _
"00,C1,81,40,01,C0,80,41,01,C0,80,41,00,C1,81,40,01,C0,80,41,00,C1,81,40,00,C1,81,40,01,C0," & _
"80,41,01,C0,80,41,00,C1,81,40,00,C1,81,40,01,C0,80,41,00,C1,81,40,01,C0,80,41,01,C0,80,41," & _
"00,C1,81,40,01,C0,80,41,00,C1,81,40,00,C1,81,40,01,C0,80,41,00,C1,81,40,01,C0,80,41,01,C0," & _
"80,41,00,C1,81,40,00,C1,81,40,01,C0,80,41,01,C0,80,41,00,C1,81,40,01,C0,80,41,00,C1,81,40," & _
"00,C1,81,40,01,C0,80,41,01,C0,80,41,00,C1,81,40,00,C1,81,40,01,C0,80,41,00,C1,81,40,01,C0," & _
"80,41,01,C0,80,41,00,C1,81,40,00,C1,81,40,01,C0,80,41,01,C0,80,41,00,C1,81,40,01,C0,80,41," & _
"00,C1,81,40,00,C1,81,40,01,C0,80,41,00,C1,81,40,01,C0,80,41,01,C0,80,41,00,C1,81,40,01,C0," & _
"80,41,00,C1,81,40,00,C1,81,40,01,C0,80,41,01,C0,80,41,00,C1,81,40,00,C1,81,40,01,C0,80,41," & _
"00,C1,81,40,01,C0,80,41,01,C0,80,41,00,C1,81,40"

'CRC16校验低位预存值
Public bytCRC16L(0 To 255) As Byte
Public Const strCRC16L As String = _
"00,C0,C1,01,C3,03,02,C2,C6,06,07,C7,05,C5,C4,04,CC,0C,0D,CD,0F,CF,CE,0E,0A,CA,CB,0B,C9,09," & _
"08,C8,D8,18,19,D9,1B,DB,DA,1A,1E,DE,DF,1F,DD,1D,1C,DC,14,D4,D5,15,D7,17,16,D6,D2,12,13,D3," & _
"11,D1,D0,10,F0,30,31,F1,33,F3,F2,32,36,F6,F7,37,F5,35,34,F4,3C,FC,FD,3D,FF,3F,3E,FE,FA,3A," & _
"3B,FB,39,F9,F8,38,28,E8,E9,29,EB,2B,2A,EA,EE,2E,2F,EF,2D,ED,EC,2C,E4,24,25,E5,27,E7,E6,26," & _
"22,E2,E3,23,E1,21,20,E0,A0,60,61,A1,63,A3,A2,62,66,A6,A7,67,A5,65,64,A4,6C,AC,AD,6D,AF,6F," & _
"6E,AE,AA,6A,6B,AB,69,A9,A8,68,78,B8,B9,79,BB,7B,7A,BA,BE,7E,7F,BF,7D,BD,BC,7C,B4,74,75,B5," & _
"77,B7,B6,76,72,B2,B3,73,B1,71,70,B0,50,90,91,51,93,53,52,92,96,56,57,97,55,95,94,54,9C,5C," & _
"5D,9D,5F,9F,9E,5E,5A,9A,9B,5B,99,59,58,98,88,48,49,89,4B,8B,8A,4A,4E,8E,8F,4F,8D,4D,4C,8C," & _
"44,84,85,45,87,47,46,86,82,42,43,83,41,81,80,40"

'*************************************************************************
'**函 数 名:CRC16
'**输 入:bytData()(Byte) - 要处理的消息数据(字节数组)
'** :intNum(Integer) - 消息的字节长度
'** :bytCRCH(Byte) - CRC高位字节
'** :bytCRCL(Byte) - CRC低位字节
'**输 出:CRC校验字
'**功能描述:计算消息的CRC校验字节
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2003年12月15日
'**修 改 人:
'**日 期:
'**版 本:V1.0
'*************************************************************************
Public Function CRC16(bytData() As Byte, intNum As Integer, Optional bytCRCH As Byte = 0, Optional bytCRCL As Byte = 0) As Long
Dim i As Integer
Dim bytCRCHi As Byte
Dim bytCRCLo As Byte
Dim bytIndex As Byte
bytCRCHi = &HFF
bytCRCLo = &HFF

For i = 0 To intNum - 1
bytIndex = bytCRCHi Xor bytData(i)
bytCRCHi = bytCRCLo Xor bytCRC16H(bytIndex)
bytCRCLo = bytCRC16L(bytIndex)
Next

bytCRCH = bytCRCHi
bytCRCL = bytCRCLo
CRC16 = bytCRCH
CRC16 = CRC16 * 256 + bytCRCL
End Function


rgbcy 2005-11-16
  • 打赏
  • 举报
回复
可以用查表法
laviewpbt 2005-11-15
  • 打赏
  • 举报
回复
http://www.eengineerarea.com/vbic/vb_1.htm
VB下的CRC验证程序!
shelanbor 2005-11-15
  • 打赏
  • 举报
回复
左移×2
右移/2
jinhailv 2005-11-11
  • 打赏
  • 举报
回复
顺便问一个问题:VB中怎么实现字符的左/右移?
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows Blue(Windows 8.1),同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.0版分为标准版、增强版以及在线修复版。其的标准版以及增强版都包含完整的DirectX组件,增强版还额外包含了c++ Redistributable Package,因此增强版适合无法自行解决c++相关问题的用户使用;在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统的c++组件。V3.0版本使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。此功能仅限于增强版。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框包含了3项高级功能。点击其的“注册系统文件夹所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。注意,并不是所有的dll文件都可以通过这种方式注册。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7用户,可以直接运行本程序。 同时鉴于Windows 8(Windows Blue、Windows 8.1)系统默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows Blue、Windows 8.1)系统直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388所有的更新以及技术支持都可以到该博客上找到。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧