CRC 效验和——CRC16 0xA001 RTU

工业控制中的一些周边设备,其通信协议一般很多用modus 通信,而modus 通信就必须有 crc 效验,常用的效验是 CRC 16 ,显示CRC16 RTU 的实现方式。

直接上代码:

   public static ushort CalculateCRC(byte[] buffer)
   {
       ushort CRC = 0xFFFF;

       for (int CRC_count = 0; CRC_count < buffer.Length; CRC_count++)
       {
           byte data = buffer[CRC_count];
           CRC ^= data; // 将 CRC 与当前字节进行异或操作  

           for (int i = 0; i < 8; i++)
           {
               if ((CRC & 1) != 0) // 检查 CRC 的最低位  
               {
                   CRC >>= 1; // 右移一位  
                   CRC ^= 0xA001; // 如果最低位是 1,则与多项式 0xA001 进行异或  
               }
               else
               {
                   CRC >>= 1; // 否则仅右移一位  
               }
           }
       }

       return CRC;
   }
   static void Main(string[] args)
   {
       //  byte[] data = { 0x01, 0x03, 0x20, 0x00, 0x00, 0x01 }; // 替换为实际数据  
       byte[] data = { 0x01, 0x10, 0x21, 0x03, 0x00, 0x01,0x02,0x01,0xf4}; // 替换为实际数据  
       ushort crc = CalculateCRC(data);
       byte c = (byte)(0x00FF & crc); // 低位
       byte c2 = (byte)( (0xFF00 & crc) >>8);  //  高位
       string s = crc.ToString("X4"); //
       Console.WriteLine("CRC16-RTU: " + crc.ToString("X4")); // 以十六进制格式输出 CRC 值.    一般CRC 是高位在后,低位在前
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值