朋友们,帮帮忙!

qdqd-520 2011-02-16 04:52:19
我需要把这段C语言写的函数转化为vb6.0的函数,请朋友们帮忙了,谢谢

//例如:求三个字节0xAA 0xAA 0xAA(16进制)的CRC校验码
//字符指针ptr指向此串,count是指针ptr的长度,此时为3,
//求得的CRC校验码是0x9C 0x48
int calcrc( char *ptr, int count ) //求CRC的calcrc函数,ptr是指向字符数组的指针
{ //count是待求CRC校验码的字节数
int i;
unsigned int crc; //要返回的CRC,16位的
unsigned char crc1,crc2,crc3; //指向数组中连续的三个字符(byte),8位的
ptr[count] = 0x00; //计算CRC串的末尾添加两个字节的0x00
ptr[count+1] = 0x00;
crc1 = *ptr++ ;
crc2 = *ptr++ ;
while (--count >= 0) {
crc3 = *ptr++ ; //在while中补充下一个字符(8个bit)
for (i = 0; i < 8; ++i)
{
if (crc1 & 0x80) //判断crc1高位是否为1
{
crc1 = crc1 << 1; //移出高位
if(crc2 & 0x80) //判断crc2高位是否为1
{
crc1=crc1 | 0x01; //crc1低位由0变1
}
crc2 = crc2 << 1; //crc2移出高位
if(crc3 & 0x80) //判断crc3高位是否为1
{
crc2=crc2 | 0x01; //crc2低位由0变1
}
crc3=crc3<<1; //crc3移出高位
crc1=crc1 ^ 0x10; //前8bit与0x10异或
crc2=crc2 ^ 0x21; //后8bit与0x21异或
}
else //如果crc1高位不为1,只移位不做异或
{
crc1 = crc1 << 1;
if(crc2 & 0x80)
{
crc1=crc1 | 0x01;
}
crc2 = crc2 << 1;
if(crc3 & 0x80)
{
crc2=crc2 | 0x01;
}
crc3=crc3<<1;
}
}//for
}//while
crc=(crc1<<8)+crc2; //返回的16位的crc校验码
return (crc);
}//calcrc
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2011-02-17
  • 打赏
  • 举报
回复
如果是标准的 CRC 算法,直接搜 VB CRC算法 即可。
qdqd-520 2011-02-17
  • 打赏
  • 举报
回复
高手在哪里啊?怎么没人呢?

7,763

社区成员

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

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