C#写的 crc16校验方法

wqm_44944 2006-10-16 07:45:56
public static byte[] crc(byte[] data)
{

//crc校验

Byte CRC16Lo = 0xFF;// CRC寄存器
Byte CRC16Hi = 0xFF;
Byte CL = 0x01; // '多项式码&HA001
Byte CH = 0xA0;
Byte SaveHi, SaveLo;

for (int intI = 0; intI < data.Length; intI++)
{

CRC16Lo = Convert.ToByte(CRC16Lo ^ data[intI]); //每一个数据与CRC寄存器进行异或
for (int flag = 0; flag < 7; flag++)
{
SaveHi = CRC16Hi;
SaveLo = CRC16Lo;
CRC16Hi = Convert.ToByte(CRC16Hi / 2); // '高位右移一位
CRC16Lo = Convert.ToByte(CRC16Lo / 2); // '低位右移一位
if ((SaveHi & 0x01) == 0x01)
{ //'如果高位字节最后一位为1
CRC16Lo = Convert.ToByte(CRC16Lo | 0x80); //'则低位字节右移后前面补1
} //'否则自动补0
if (Convert.ToByte(SaveLo &0x01) == 0x01)
{ //如果CRC16的LSB(最低位)为1,则与多项式码进行异或
CRC16Hi = Convert.ToByte(CRC16Hi ^ CH);
CRC16Lo = Convert.ToByte(CRC16Lo ^ CL);
}

}
}

byte[] bytCRCResult = new byte[2];
bytCRCResult[0] = CRC16Hi;
bytCRCResult[1] = CRC16Lo;
return bytCRCResult;



}

请问高手那里有错!
...全文
404 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqm_44944 2006-10-16
  • 打赏
  • 举报
回复
测试参数:
byte[] crcValue = new byte[6];
crcValue[0] = 5;
crcValue[1] = 3;
crcValue[2] = 0;
crcValue[3] = 60;
crcValue[4] = 0;
crcValue[5] = 60;
byte[] crcRet = new byte[2];

crcRet = crc16.crc(crcValue);

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧