总结一些通讯协议中常用到的几种校验方法:
1.CS和校验(如:标准188协议校验方式)
/// <summary> /// CS和校验 /// </summary> /// <param name="Abyte"></param> /// <returns></returns> public static byte Check_CS(byte[] Abyte) { byte result = new byte(); try { int num = 0; for (int i = 0; i < Abyte.Length; i++) { num = (num + Abyte[i]) % 256; } result = (byte)num; } catch { result = 0; } return result; }
2.CRC16校验
CRC16校验的方式比较多(如下图)我这里用到了2种,具体对应那个闹不清了【捂脸】,下方附上CRC校验工具有需要的可以自己尝试下。
CRC校验工具: http://pan.baidu.com/s/1bpD9gbP
/// <summary> /// CRC16校验函数 (一) /// </summary> /// <param name="x"></param> /// <returns></returns> private static byte[] CRC16(byte[] x) { byte[] temdata = new byte[2]; int len = x.Length; UInt16 crc = 0; byte da; int i = 0; UInt16[] yu = { 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7, 0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef }; while (len-- != 0) { da = (byte)(((byte)(crc / 256)) / 16); crc <<= 4; crc ^= yu[da ^ x[i] / 16]; da = (byte)(((byte)(crc / 256)) / 16); crc <<= 4