分享

CRC12的C和VB写法

 汉江秋月夜 2012-04-11
CRC12的C和VB写法 [原创 2008-09-17 11:13:35]   
我顶 字号:
C写法:
/*=========================================================================================*/
#define uchar unsigned char
#define uint unsigned int

/*----------CRC12校验------------*/
uint CRC12(uchar* pcData,uchar len)
{
uchar cTemp,temp;
uint iCrc=0;
while(len--!=0)
{
for(cTemp=0x80; cTemp!=0; cTemp>>=1)
{
if((iCrc&0x8000)!=0)
{
iCrc<<=1;
iCrc^=0x80d0;
} //---余式CRC 乘以2 再求CRC ---//
else
{
iCrc<<=1;
}
temp = ((*pcData)&0x7f);
if((temp&cTemp)!=0)
{
iCrc^=0x80d0; //----再加上本位的CRC----//
}
}
pcData ;
}
return(iCrc>>4);
}

VB写法:
'----------CRC12校验------------
Public Function CRC12(ByRef pcData() As Byte) As Integer

Dim str_len As Byte, FLAG As Byte
Dim cTemp As Byte, temp As Byte, tem As Byte
Dim CRCHI As Byte, CRCLO As Byte
Dim iCrc As Integer
tem = 0
CRCHI = 0
CRCLO = 0
For str_len = 1 To UBound(pcData)
DoEvents
cTemp = &H80
Do While cTemp <> 0
DoEvents
If ((CRCHI And &H80) <> 0) Then

FLAG = (CRCLO And &H80) \ &H80
CRCLO = CRCLO And &H7F
CRCLO = CRCLO * 2
CRCHI = CRCHI And &H7F
CRCHI = (CRCHI * 2) FLAG


CRCHI = CRCHI Xor &H80
CRCLO = CRCLO Xor &HD0
'---余式CRC 乘以2 再求CRC ---
Else
FLAG = (CRCLO And &H80) \ &H80
CRCLO = CRCLO And &H7F
CRCLO = CRCLO * 2
CRCHI = CRCHI And &H7F
CRCHI = (CRCHI * 2) FLAG



End If
temp = pcData(tem) And &H7F

If ((temp And cTemp) <> 0) Then
CRCHI = CRCHI Xor &H80
CRCLO = CRCLO Xor &HD0
'//----再加上本位的CRC----//

End If
cTemp = cTemp \ 2
Loop
tem = tem 1
Next

FLAG = CRCHI And &HF
CRCHI = CRCHI \ 16
CRCLO = CRCLO \ 16
CRCLO = CRCLO (FLAG * 16)
iCrc = CRCHI * 256 CRCLO
CRC12 = iCrc
End Function
使用时,pcData参数的下标应该和需要校验的数据长度一致。
分类: 软件
阅读(244) | 评论(2) | 转帖 | 推荐 | 举报
我 顶
觉得精彩就顶一下,顶的多了,文章将出现在更重要的位置上。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多