CRC16校验

原创 2011年01月19日 16:22:00

测试使用modbus通讯协议的电力表时 用到CRC16校验

/// <summary>
        /// CRC16校验
        /// </summary>
        /// <param name="RecData"></param>
        /// <returns></returns>
        public  byte[] DataValidation(byte[] data)
        {
            byte CRC16Hi;
            byte CRC16Lo;
            byte CL;
            byte CH;
            byte SaveHi;
            byte SaveLo;
            int i;
            int flag;
            CRC16Hi = 0xff;
            CRC16Lo = 0xff;
            CL = 0x01;
            CH = 0xA0;
            byte[] result = new byte[2];
            try
            {
                for (i = 0; i < data.Length; i++)
                {
                    CRC16Lo = (byte)((int)CRC16Lo ^ (int)data[i]);

                    for (flag = 0; flag < 8; flag++)
                    {
                        SaveHi = CRC16Hi;
                        SaveLo = CRC16Lo;
                        CRC16Hi = (byte)((int)CRC16Hi >> 1);
                        CRC16Lo = (byte)((int)CRC16Lo >> 1);
                        if ((SaveHi & 0x01) == 0x01)
                        {
                            CRC16Lo = (byte)((int)(CRC16Lo) | (int)0x80);
                        }
                        if ((SaveLo & 0x01) == 0x01)
                        {
                            CRC16Hi = (byte)((int)CRC16Hi ^ (int)CH);
                            CRC16Lo = (byte)((int)CRC16Lo ^ (int)CL);
                        }
                    }
                }
            }
            catch
            {
                result[0] = 0x7F;
                result[1] = 0x7F;
            }
            result[0] = CRC16Lo;
            result[1] = CRC16Hi;
            return result;
        }

安卓实现CRC16校验码

package android_serialport_api.util; /** * 作 者: $ xbj * 文 件 名: CrcUtil * 描 述: ${desc} crc...
  • xbj1015892775
  • xbj1015892775
  • 2017年03月09日 14:24
  • 900

CRC原理详解(附crc16校验代码)

参考链接: https://www.cnblogs.com/esestt/archive/2007/08/09/848856.html Cyclic Redundancy Chec...
  • xing414736597
  • xing414736597
  • 2017年12月02日 11:26
  • 113

python写的具有CRC16生成、校验功能的简单类

利用的是查表法,多项式是X16+
  • fenglifeng1987
  • fenglifeng1987
  • 2014年07月22日 14:36
  • 5329

C# CRC16校验

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst...
  • yiyi0608
  • yiyi0608
  • 2017年02月09日 12:02
  • 1214

crc16 校验代码C语言实现 和原理分析

typedef    unsigned char     uchar;  typedef    unsigned int      uint;  typedef    unsigned short...
  • u010841212
  • u010841212
  • 2014年12月11日 12:32
  • 4548

非多项式CRC16校验算法

#define CRC_PRESET      0xffff #define CRC_POLYNOM     0xa001//电量CRC16的多项式 #define CRC_SPOLYNOM   ...
  • czw707703387
  • czw707703387
  • 2014年08月25日 21:29
  • 659

Java CRC16校验

从C版本(freemodbus源代码)移植过来的: 简单的对比了几次校验结果,正确的,上代码: 需要CRC8的看这里http://blog.csdn.net/trbbadboy/article/det...
  • trbbadboy
  • trbbadboy
  • 2014年12月25日 13:55
  • 28486

CRC16 生成校验

-(unsigned short)crc16 {     Byte *bytes = (Byte *)[self bytes];     uint16_t length = (uint16_...
  • u011862058
  • u011862058
  • 2016年07月05日 16:59
  • 293

CRC16自定义校验查表法

public class CRC16 { //校验公式为0x1021 private static int[] CRC16Table = { /* CRC16 余式表 */ 0x0000, 0...
  • java_exception_souji
  • java_exception_souji
  • 2016年11月24日 17:19
  • 885

Java实现crc16校验 附上校验工具对照。解决长数据校验不正确的问题

Android与底层硬件通信,进行CRC16校验时,要考虑到无符号整形的原因,java会将超过的值变成负数 C算法: Uint16 crc16 = 0; Uint8  i = 0;   Uint16...
  • huanchengdao
  • huanchengdao
  • 2015年10月21日 15:21
  • 3177
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CRC16校验
举报原因:
原因补充:

(最多只允许输入30个字)