马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
VB: Public Function CrcResult(ByVal Data As Long, ByVal Genpoly As Long, ByVal CrcData As Long) As Long
Dim TmpI As Integer
Data = Data * 2
For TmpI = 8 To 1 Step -1
Data = Fix(Data / 2)
If ((Data Xor CrcData) And 1) Then
CrcData = Fix(CrcData / 2) Xor Genpoly
Else
CrcData = Fix(CrcData / 2)
End If
Next TmpI
CrcResult = CrcData
End Function
//函数应用方法
Dim fx(7)
Dim crc As Long
fx(0) = Val(Text2.Text)
fx(1) = &H3
fx(2) = &H0
fx(4) = &H0
fx(5) = &H1
fx(3) = MDI.Combo3.ListIndex
crc = &HFFFF&
For TmpI = 0 To 5
crc = CrcResult(CLng(fx(TmpI)), &HA001&, crc)
Next
fx(6) = CByte(crc And &HFF&) ‘得到的校验高位
fx(7) = CByte(Fix(crc / 256) And &HFF&) ‘得到的校验低位
VC:
LONG myfunc::crc(LONG Data,LONG Genpoly,LONG CrcData)
{ INT TmpI;
Data = Data * 2;
for(TmpI = 8;TmpI>=1;TmpI--)
{
Data = int(Data / 2);
if ((Data ^ CrcData) & 1)
CrcData = int(CrcData / 2) ^ Genpoly;
else
CrcData = int(CrcData / 2);
}
return CrcData;
}
//函数应用方法
long crc;
UCHAR buf[8]={0xef,0x3,0x0,0x0,0x0,0x1,0x0,0x0};
buf[0]=add;
buf[2]=cmd & 0xff00;
buf[3]=cmd & 0xff;
crc = 0xFFFF;
for (i=0;i<6;i++)
{
crc = func.crc((long)buf, 0xA001,crc);
}
buf[6]=(BYTE)(crc & 0xFF);
buf[7] =(BYTE)(int(crc / 256) & 0xFF);
|