TCP/IP通信或串口通信数据校验

来源:互联网 发布:字体设计软件 编辑:程序博客网 时间:2024/06/05 16:25
        /// <summary>        /// RLC校验        /// </summary>        /// <param name="writeUncheck"></param>        /// <returns></returns>        public static string CheckSum(string writeUncheck)        {            char[] hexArray = new char[writeUncheck.Length];            hexArray = writeUncheck.ToCharArray();            int decNum = 0, decNumMSB = 0, decNumLSB = 0;            int decByte, decByteTotal = 0;            bool msb = true;            for (int t = 0; t <= hexArray.GetUpperBound(0); t++)            {                if ((hexArray[t] >= 48) && (hexArray[t] <= 57))                    decNum = (hexArray[t] - 48);                else if ((hexArray[t] >= 65) & (hexArray[t] <= 70))                    decNum = 10 + (hexArray[t] - 65);                if (msb)                {                    decNumMSB = decNum * 16;                    msb = false;                }                else                {                    decNumLSB = decNum;                    msb = true;                }                if (msb)                {                    decByte = decNumMSB + decNumLSB;                    decByteTotal += decByte;                }            }            decByteTotal = (255 - decByteTotal) + 1;            decByteTotal = decByteTotal & 255;            int a, b = 0;            string hexByte = "", hexTotal = "";            double i;            for (i = 0; decByteTotal > 0; i++)            {                b = Convert.ToInt32(System.Math.Pow(16.0, i));                a = decByteTotal % 16;                decByteTotal /= 16;                if (a <= 9)                    hexByte = a.ToString();                else                {                    switch (a)                    {                        case 10:                            hexByte = "A";                            break;                        case 11:                            hexByte = "B";                            break;                        case 12:                            hexByte = "C";                            break;                        case 13:                            hexByte = "D";                            break;                        case 14:                            hexByte = "E";                            break;                        case 15:                            hexByte = "F";                            break;                    }                }                hexTotal = String.Concat(hexByte, hexTotal);            }            return hexTotal;        }        /// <summary>        /// RLC校验(异或 取反 加1<span style="font-family: Arial, Helvetica, sans-serif;">)</span>        /// </summary>        /// <param name="hexString"></param>        /// <returns></returns>        public static string CheckSumqy(string hexString)        {            hexString = hexString.Replace(" ", "");            int strLen = hexString.Length / 2;            //16进制转10进制            int y = Convert.ToInt32(hexString.Substring(0, 2), 16);            //异或运算            for (int i = 0; i < strLen - 1; i++)            {                //16进制转10进制                int x = Convert.ToInt32(hexString.Substring((i + 1) * 2, 2), 16);                y ^= x;            }            //十进制转二进制            string fy = Convert.ToString(y, 2);            //二进制取反            string fyf = "";            for (int i = 0; i < fy.Length; i++)            {                if (fy.Substring(i, 1) == "1")                {                    fyf += "0";                }                else {                    fyf += "1";                }            }            //二进制转换为10进制加1            int LRCx = Convert.ToInt32(fyf, 2) + 1;            //10进制转换为16进制度            string LRC = Convert.ToString(LRCx, 16);            return LRC;        }        /// <summary>        /// 求和 取反 加1        /// </summary>        /// <param name="hexstring"></param>        /// <returns></returns>        public static string CheckSumgz(string hexstring)        {            //压缩替换空格            hexstring = hexstring.Replace(" ", "");            int strLen = hexstring.Length / 2;            //16进制转10进制            int y = Convert.ToInt32(hexstring.Substring(0, 2), 16);            //求和运算            for (int i = 0; i < strLen - 1; i++)            {                //16进制转10进制                int x = Convert.ToInt32(hexstring.Substring((i + 1) * 2, 2), 16);                y += x;            }            int msgint = 255 - y % 256 + 1;            hexstring = Convert.ToString(msgint, 16).ToUpper();            if (hexstring.Length<2)            {                hexstring = "0" + hexstring;            }            return hexstring;        }
0 0
原创粉丝点击