1. 封装一个静态类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks; namespace TestApp
    {
    public class CRC
    { #region CRC16
    public static byte[] CRC16(byte[] data)
    {
    int len = data.Length;
    if (len > )
    {
    ushort crc = 0xFFFF; for (int i = ; i < len; i++)
    {
    crc = (ushort)(crc ^ (data[i]));
    for (int j = ; j < ; j++)
    {
    crc = (crc & ) != ? (ushort)((crc >> ) ^ 0xA001) : (ushort)(crc >> );
    }
    }
    byte hi = (byte)((crc & 0xFF00) >> ); //高位置
    byte lo = (byte)(crc & 0x00FF); //低位置 return new byte[] { hi, lo };
    }
    return new byte[] { , };
    }
    #endregion #region ToCRC16
    public static string ToCRC16(string content)
    {
    return ToCRC16(content, Encoding.UTF8);
    } public static string ToCRC16(string content, bool isReverse)
    {
    return ToCRC16(content, Encoding.UTF8, isReverse);
    } public static string ToCRC16(string content, Encoding encoding)
    {
    return ByteToString(CRC16(encoding.GetBytes(content)), true);
    } public static string ToCRC16(string content, Encoding encoding, bool isReverse)
    {
    return ByteToString(CRC16(encoding.GetBytes(content)), isReverse);
    } public static string ToCRC16(byte[] data)
    {
    return ByteToString(CRC16(data), true);
    } public static string ToCRC16(byte[] data, bool isReverse)
    {
    return ByteToString(CRC16(data), isReverse);
    }
    #endregion #region ToModbusCRC16
    public static string ToModbusCRC16(string s)
    {
    return ToModbusCRC16(s, true);
    } public static string ToModbusCRC16(string s, bool isReverse)
    {
    return ByteToString(CRC16(StringToHexByte(s)), isReverse);
    } public static string ToModbusCRC16(byte[] data)
    {
    return ToModbusCRC16(data, true);
    } public static string ToModbusCRC16(byte[] data, bool isReverse)
    {
    return ByteToString(CRC16(data), isReverse);
    }
    #endregion #region ByteToString
    public static string ByteToString(byte[] arr, bool isReverse)
    {
    try
    {
    byte hi = arr[], lo = arr[];
    return Convert.ToString(isReverse ? hi + lo * 0x100 : hi * 0x100 + lo, ).ToUpper().PadLeft(, '');
    }
    catch (Exception ex) { throw (ex); }
    } public static string ByteToString(byte[] arr)
    {
    try
    {
    return ByteToString(arr, true);
    }
    catch (Exception ex) { throw (ex); }
    }
    #endregion #region StringToHexString
    public static string StringToHexString(string str)
    {
    StringBuilder s = new StringBuilder();
    foreach (short c in str.ToCharArray())
    {
    s.Append(c.ToString("X4"));
    }
    return s.ToString();
    }
    #endregion #region StringToHexByte
    private static string ConvertChinese(string str)
    {
    StringBuilder s = new StringBuilder();
    foreach (short c in str.ToCharArray())
    {
    if (c <= || c >= )
    {
    s.Append(c.ToString("X4"));
    }
    else
    {
    s.Append((char)c);
    }
    }
    return s.ToString();
    } private static string FilterChinese(string str)
    {
    StringBuilder s = new StringBuilder();
    foreach (short c in str.ToCharArray())
    {
    if (c > && c < )
    {
    s.Append((char)c);
    }
    }
    return s.ToString();
    } /// <summary>
    /// 字符串转16进制字符数组
    /// </summary>
    /// <param name="hex"></param>
    /// <returns></returns>
    public static byte[] StringToHexByte(string str)
    {
    return StringToHexByte(str, false);
    } /// <summary>
    /// 字符串转16进制字符数组
    /// </summary>
    /// <param name="str"></param>
    /// <param name="isFilterChinese">是否过滤掉中文字符</param>
    /// <returns></returns>
    public static byte[] StringToHexByte(string str, bool isFilterChinese)
    {
    string hex = isFilterChinese ? FilterChinese(str) : ConvertChinese(str); //清除所有空格
    hex = hex.Replace(" ", "");
    //若字符个数为奇数,补一个0
    hex += hex.Length % != ? "" : ""; byte[] result = new byte[hex.Length / ];
    for (int i = , c = result.Length; i < c; i++)
    {
    result[i] = Convert.ToByte(hex.Substring(i * , ), );
    }
    return result;
    }
    #endregion }
    }
  2. 调用测试
      static void Main(string[] args)
    {
    string msg = "01 2C 00 00 00 00 00 00 0A 4F 4F 05 93 00 07 06 15 00 00 00 23 3D F5 7C 45 71 20 00 45 71 20 00 00 00 00 00 40 DF 70 E3 00 00 00 00 BF 8F D6 63 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3D F9 00 45 71 20 00 45 71 20 00 00 00 00 00 00 00 00 00 00 00 00 00 BF 8E 47 99 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3D FC 84 45 71 20 00 45 71 20 00 00 00 00 00 00 00 00 00 00 00 00 00 BF 8A FD 76 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3E 00 08 45 71 20 00 45 71 20 00 00 00 00 00 00 00 00 00 00 00 00 00 BF 92 C7 B9 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3E 03 8C 45 71 20 00 45 71 20 00 00 00 00 00 00 00 00 00 00 00 00 00 BF 8A A4 FD 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3E 07 10 45 71 20 00 45 71 20 00 00 00 00 00 00 00 00 00 00 00 00 00 BF 8D EE CC 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3E 0A 94 45 71 20 00 45 71 20 00 00 00 00 00 00 00 00 00 00 00 00 00 BF 88 38 B0 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3E 0E 18 45 71 40 00 45 71 50 00 00 00 00 00 41 1F D4 4B 00 00 00 00 BF 7C 04 97 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3E 11 9C 45 71 70 00 45 71 70 00 00 00 00 00 41 15 7B 74 00 00 00 00 BF 8E A0 12 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00 23 3E 15 20 45 71 90 00 45 71 90 00 00 00 00 00 40 E1 D9 FE 00 00 00 00 BF 8C E5 0D 00 00 00 00 00 00 00 00 10 20 00 00 41 30 00 00";
    var a = CRC.ToCRC16(msg, true); //结果为:
    var b = CRC.ToCRC16(msg, false); //结果为:
    var c = CRC.ToModbusCRC16(msg, true); //结果为:
    var e = CRC.ToModbusCRC16(msg, false);
    var d = CRC.ToCRC16("你好,我们测试一下CRC16算法", true); //结果为:
    }

    完成。

crc16 校验算法 C#的更多相关文章

  1. JS写的CRC16校验算法

    var CRC = {}; CRC.CRC16 = function (data) { var len = data.length; if (len > 0) { var crc = 0xFFF ...

  2. JS写的CRC16校验算法(查表法)

    var CRC = {}; CRC._auchCRCHi = [ 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0 ...

  3. Delphi CRC16校验算法实现(转)

    循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利用除法及余数的原理来作错误侦测(Error Detecting)的.实际应用时,发送装置计算出CRC值并随 ...

  4. Python CRC16校验算法

    def crc16(x, invert): a = 0xFFFF b = 0xA001 for byte in x: a ^= ord(byte) for i in range(8): last = ...

  5. 【转】crc16几种标准校验算法及c语言代码

    一.CRC16校验码的使用 现选择最常用的CRC-16校验,说明它的使用方法. 根据Modbus协议,常规485通讯的信息发送形式如下: 地址 功能码 数据信息 校验码 1byte 1byte nby ...

  6. PHP CRC16 校验码的算法怎么使用

    PHP CRC16 校验码的算法如何使用最近用到CRC16, 我现在就是要把 010301180001 算出CRC16的校验码,通过其他工具,可以得到 校验码是 05F1 最后完整的代码就是 0103 ...

  7. Java CRC16 MODBUS校验算法实现

    /** * CRC校验算法工具类 */ public class CRCUtil { public static String getCRC(String data) { data = data.re ...

  8. 查表法计算CRC16校验值

    CRC16是单片机程序中常用的一种校验算法.依据所采用多项式的不同,得到的结果也不相同.常用的多项式有CRC-16/IBM和CRC-16/CCITT等.本文代码采用的多项式为CRC-16/IBM: X ...

  9. CRC-16校验C#代码

    [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Text; usi ...

随机推荐

  1. 求n以内的质数的数量

  2. 计算gcd Exercise07_14

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:计算gcd * */ public class Exercise07_14 ...

  3. Erlang学习记录(二)——基本数据类型

    Erlang可以说和我以前接触过的语言都大不相同,这个从它的类型定义就可以看出来...反正学起来觉得既不熟悉,也不亲切,我估计在用Erlang写应用的时候,整个编程思路都要变一下了.不过存在即是合理的 ...

  4. opengl笔记——OpenGL好资料备忘

    Plane Equation 注:面可理解为:连接面上的点与原点,投影相同(为:a*x1+b*x2+c*x3) OpenGL Matrix Class (C++) Overview OpenGL fi ...

  5. centos安装lnmp

    安装ssh yum install openssh-server ====================== 查看SSH是否安装. ◆输入命令:rpm -qa | grep ssh 注:若没安装SS ...

  6. VirtualBox的网络配置,Host Only+NAT方式

    其实网络这类相关的文章很多,我只是想结合自己的实际情况,把我的经验写下来,给那些需要的人们吧. 主机:windows xp 虚拟机:ubuntu 10.10 Virtualbox:4.0.2 虚拟机在 ...

  7. 从Cell的视图推出一个新的界面

    先写一个方法, 强制增加一个navigation的属性. 这样self就可以调出来navigation了 - (UINavigationController*)naviController { for ...

  8. iOS中 xib自定义View在storyboard中的使用

    1,创建UIView 的SubClass 命名为MyView 2, new一个名为MyView的xib p1 3,配置xib的属性 p2 4,为View 添加背景色,添加一个按钮并定制按钮约束,这里我 ...

  9. mac 安装 composer

    使用 curl 指令下载: curl -sS https://getcomposer.org/installer | php 或是沒有安裝 curl ,也可以用 php 指令下载: php -r &q ...

  10. Windows7下安装与破解IntelliJ IDEA2017(转载)

    IDEA 全称 IntelliJ IDEA,是Java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具( ...