新手求助关于vc写的crc校验改用vb写的问题。
我以前有个vc写的crc校验,现在要改用vb写,不知哪里改错了,vb写出来的老是算不对。求大侠们帮忙看看程序。
vc代码
unsigned char CRC
CRC = CRC_Check(&comm_command[3],27);
comm_command[30] = CRC; 计算crc值,赋值到数据包最后一位
unsigned char CalHeaderCRC(unsigned char dataValue,unsigned char crcValue)
{
int crc;
unsigned char cc;
crc = crcValue ^ dataValue; /* XOR C7 ... C0 with D7 ... D0 */
crc = crc ^(crc<<1)^(crc<<2)^(crc<<3)\
^(crc<<4)^(crc<<5)^(crc<<6)^(crc<<7);
cc=unsigned char((crc&0xfe)^((crc>>8)&1));
return cc;
}
//计算CRC校验码
unsigned char CRC_Check(unsigned char * comm_command, int num)
{
unsigned char crc_code=0;
unsigned char crcValue=0xff;
int i;
for(i=0;i<num;i++)
crcValue=CalHeaderCRC(comm_command[i], crcValue);
crc_code=unsigned char(0xff-crcValue);
return(crc_code);
}
////////////////////////////////////////////////////////////////////////////
我用vb改写的代码
Dim crc As Byte
crcvalue = &HFF
For i = 3 To 29
crcvalue = CalHeaderCRC(SendData(i), crcvalue)
Next i
crc = CByte(&HFF - crcvalue)
SendData(30) = crc
计算crc值,赋值到数据包最后一位
Public Function CalHeaderCRC(ByVal dataValue As Byte, ByVal crcValue As Byte) As Byte
Dim crc As Byte
Dim cc As Byte
'On Error Resume Next
crc = crcValue Xor dataValue
crc = crc Xor (crc << 1) Xor (crc << 2) Xor (crc << 3) Xor (crc << 4) Xor (crc << 5) Xor (crc << 6) Xor (crc << 7)
cc = CByte(crc And &HFE) Xor ((crc >> 8) And 1)
Return cc
End Function
请大侠们帮忙看看,我断断续续调了几天了,也没出个结果。