|
100精币
本帖最后由 gxlm2001 于 2018-9-4 23:07 编辑
校验内容一 ST=32;CN=2011;PW=123456;MN=0873HHMZWSLH02;CP=&&DataTime=20160103133030;060-Rtd=3.0943,060-Flag=N;011-Rtd=18.0412,011-Flag=N;001-Rtd=8.2137,001-Flag=N;B01-Rtd=10.9890,B01-Flag=N&&
CRC16校验码为 A9C1
校验内容二 ST=31;CN=2011;PW=123456;MN=00000000000001;CP=&&DataTime=20180903162933;S01-Rtd=6.546142;02-Rtd=48.01542;03-Rtd=119.6738;S05-Rtd=22.7324;gasPress-Rtd=86.56911;Alarm=&&
CRC16校验码为 3a15
C语言代码一
函数 CRC16_Checkout
描述 CRC16循环冗余校验算法
参数一 *puchMsg 需要校验的字符串指针
参数二 usDataLen 需要校验的字符串长度
返回值 返回CRC16校验码
unsigned int CRC16_Checkout(unsigned char *puchMsg,unsigned int usDataLen)
{
unsigned int i,j,crc_reg,check;
crc_reg=0*FFFF;
for(i=0;i<usDataLen;i++)
{
crc_reg=(crc_reg>>8)^puchMsg;
for(j=0;j<8;j++)
{
check=crc_reg & 0*0001;
crc_reg>>=1;
if(check == 0*0001)
{
crc_reg ^= 0*A001;
}
}
}
return crc_reg;
}
C语言代码二
unsigned int CRC16_Checkout(unsigned char *puchMsg,unsigned int usDataLen)
{
unsigned int i,j,crc_reg,check;
crc_reg=0*FFFF;
for(i=0;i<usDataLen;i++)
{
crc_reg=(crc_reg>>8)^puchMsg;
for(j=0;j<8;j++)
{
check=crc_reg & 0*0001;
crc_reg>>=1;
if(check == 0*0001)
{
crc_reg ^= 0*A001;
}
}
}
return crc_reg;
}
VB代码
Function CRC16(data() As Byte) As Long
Dim r As Long
Dim hi As Byte
Dim flag As Byte
Dim i As Long
Dim j As Long
r = &HFFFF&
For j = 0 To UBound(data)
hi = r \ &H100&
hi = hi Xor data(j)
r = hi
For i = 1 To 8
flag = r And 1
r = r \ 2
If flag = 1 Then
r = r Xor &HA001&
End If
Next
Next
CRC16 = r
End Function
Sub Main()
Dim s As String
Dim a() As Byte
s = "ST=32;CN=2011;PW=123456;MN=0873HHMZWSLH02;CP=&&DataTime=20160103133030;060-Rtd=3.0943,060-
Flag=N;011-Rtd=18.0412,011-Flag=N;001-Rtd=8.2137,001-Flag=N;B01-Rtd=10.9890,B01-Flag=N&&"
a = StrConv(s, vbFromUnicode)
Debug.Print Hex(CRC16(a))
End Sub
以上3个源代码均能校验 其中一种转成易语言即可
|
评分
-
查看全部评分
求助知识:请将问题描述清楚,最好把你有问题的源码打包上传上来,这样更方便大家帮助你。 友情提醒:本版被采纳的主题可在 申请荣誉值 帖子申请荣誉值,获得 3点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
|