c++实现如下:
CRC校验方式:unsigned short Crc16(uint crcdata, uchar bufdata){uchar i;crcdat ^= bufdata;for( i = 8; i>0; i--){ crcdata >>= 1;if( crcdata&0x01) crcdata ^= 0xa001;}return crcdata;}unsigned short MyCRC16(unsigned char *puchMsg, unsigned short usDataLen)//puchMsg ; /* 要进行CRC 校验的消息*///usDataLen ; /* 消息中字节数*/{uint crcdata = 0xffff;while (usDataLen--) /* 传输消息缓冲区*/{ crcdata = Crc16(crcdata, *puchMsgg++);}return crcdata ;}
翻译成c#版是什么样的啊?大家帮帮忙,自己写的c#的crc检验,和这个算出来的不一样!
下面是我的CRC检验:
public ushort CRC16(byte[] datas, int beginIdx, int len)
{
const ushort polinomio = 0xa001;
ushort result = 0xffff;
//for (int i = beginIdx; i < len; i++)
for (int i = len - 1; i >= beginIdx; i--)
{
byte tmp = datas[i];
result = (ushort)(tmp ^ result);
for (int j = 8; j >0; j--)
{
result = (ushort)(result >> 1);
if ((result & 0x01) == 1)
{
//result = (ushort)((result >> 1) ^ polinomio);
result = (ushort)(result ^ polinomio);
}
}
}
return result;
}应该和上面的意思差不多的啊!
CRC校验方式:unsigned short Crc16(uint crcdata, uchar bufdata){uchar i;crcdat ^= bufdata;for( i = 8; i>0; i--){ crcdata >>= 1;if( crcdata&0x01) crcdata ^= 0xa001;}return crcdata;}unsigned short MyCRC16(unsigned char *puchMsg, unsigned short usDataLen)//puchMsg ; /* 要进行CRC 校验的消息*///usDataLen ; /* 消息中字节数*/{uint crcdata = 0xffff;while (usDataLen--) /* 传输消息缓冲区*/{ crcdata = Crc16(crcdata, *puchMsgg++);}return crcdata ;}
翻译成c#版是什么样的啊?大家帮帮忙,自己写的c#的crc检验,和这个算出来的不一样!
下面是我的CRC检验:
public ushort CRC16(byte[] datas, int beginIdx, int len)
{
const ushort polinomio = 0xa001;
ushort result = 0xffff;
//for (int i = beginIdx; i < len; i++)
for (int i = len - 1; i >= beginIdx; i--)
{
byte tmp = datas[i];
result = (ushort)(tmp ^ result);
for (int j = 8; j >0; j--)
{
result = (ushort)(result >> 1);
if ((result & 0x01) == 1)
{
//result = (ushort)((result >> 1) ^ polinomio);
result = (ushort)(result ^ polinomio);
}
}
}
return result;
}应该和上面的意思差不多的啊!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货