C#写的 crc16校验方法

wqm_44944 wqm_44944 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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;



}

请问高手那里有错!
...全文
评论 1
收藏 已收藏
分享
返回顶部
wqm_44944
C# 111,128 成员 642,536 内容