`
sineat
  • 浏览: 20634 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

CRC校验---余式1021的CRC实现(一)

阅读更多

    关于CRC的校验原理及其他方面的知识网上有较为全面的文章,在JAVA程序开发中,尤其是通信程序开发时经常会遇到。通常可以根据算法计算获得,也可以通过利用预先计算好的CRC表查询计算获得,以下这段是关于CRC-ITU**(生成多项式为:x16+x12+x5+1简记式为1021)余式的CRC校验的JAVA程序。其它余式CRC算法原理类似,只需替换查询表即可,完整程序如下。

java 代码
  1. package com.java.test;   
  2.   
  3.   
  4. public class CRC16B {   
  5.  static final char TABLE1021[] = { /* CRC1021余式表 */  
  6.  0x00000x10210x20420x30630x40840x50a50x60c60x70e70x8108,   
  7.    0x91290xa14a0xb16b0xc18c0xd1ad0xe1ce0xf1ef0x1231,   
  8.    0x02100x32730x22520x52b50x42940x72f70x62d60x9339,   
  9.    0x83180xb37b0xa35a0xd3bd0xc39c0xf3ff0xe3de0x2462,   
  10.    0x34430x04200x14010x64e60x74c70x44a40x54850xa56a,   
  11.    0xb54b0x85280x95090xe5ee0xf5cf0xc5ac0xd58d0x3653,   
  12.    0x26720x16110x06300x76d70x66f60x56950x46b40xb75b,   
  13.    0xa77a0x97190x87380xf7df0xe7fe0xd79d0xc7bc0x48c4,   
  14.    0x58e50x68860x78a70x08400x18610x28020x38230xc9cc,   
  15.    0xd9ed0xe98e0xf9af0x89480x99690xa90a0xb92b0x5af5,   
  16.    0x4ad40x7ab70x6a960x1a710x0a500x3a330x2a120xdbfd,   
  17.    0xcbdc0xfbbf0xeb9e0x9b790x8b580xbb3b0xab1a0x6ca6,   
  18.    0x7c870x4ce40x5cc50x2c220x3c030x0c600x1c410xedae,   
  19.    0xfd8f0xcdec0xddcd0xad2a0xbd0b0x8d680x9d490x7e97,   
  20.    0x6eb60x5ed50x4ef40x3e130x2e320x1e510x0e700xff9f,   
  21.    0xefbe0xdfdd0xcffc0xbf1b0xaf3a0x9f590x8f780x9188,   
  22.    0x81a90xb1ca0xa1eb0xd10c0xc12d0xf14e0xe16f0x1080,   
  23.    0x00a10x30c20x20e30x50040x40250x70460x60670x83b9,   
  24.    0x93980xa3fb0xb3da0xc33d0xd31c0xe37f0xf35e0x02b1,   
  25.    0x12900x22f30x32d20x42350x52140x62770x72560xb5ea,   
  26.    0xa5cb0x95a80x85890xf56e0xe54f0xd52c0xc50d0x34e2,   
  27.    0x24c30x14a00x04810x74660x64470x54240x44050xa7db,   
  28.    0xb7fa0x87990x97b80xe75f0xf77e0xc71d0xd73c0x26d3,   
  29.    0x36f20x06910x16b00x66570x76760x46150x56340xd94c,   
  30.    0xc96d0xf90e0xe92f0x99c80x89e90xb98a0xa9ab0x5844,   
  31.    0x48650x78060x68270x18c00x08e10x38820x28a30xcb7d,   
  32.    0xdb5c0xeb3f0xfb1e0x8bf90x9bd80xabbb0xbb9a0x4a75,   
  33.    0x5a540x6a370x7a160x0af10x1ad00x2ab30x3a920xfd2e,   
  34.    0xed0f0xdd6c0xcd4d0xbdaa0xad8b0x9de80x8dc90x7c26,   
  35.    0x6c070x5c640x4c450x3ca20x2c830x1ce00x0cc10xef1f,   
  36.    0xff3e0xcf5d0xdf7c0xaf9b0xbfba0x8fd90x9ff80x6e17,   
  37.    0x7e360x4e550x5e740x2e930x3eb20x0ed10x1ef0 };   
  38.   
  39. public static char getCRC1021(byte b[], int len) {   
  40.   char crc = 0;   
  41.   byte hb = 0;   
  42.   int j = 0;   
  43.   int index;   
  44.   while (len-- != 0) {   
  45.    hb = (byte) (crc / 256); //以8位二进制数的形式暂存CRC的高8位   
  46.    index = ((hb ^ b[j]) & 0xff); //求得所查索引下标   
  47.    crc <<= 8// 左移8位,相当于CRC的低8位乘以   
  48.    crc ^= (TABLE1021[index]); // 高8位和当前字节相加后再查表求CRC ,再加上以前的CRC   
  49.    j++;   
  50.   }   
  51.   return (crc);   
  52.  }   
  53.   
  54. public static void main(String args[]) {   
  55.   byte tb[] = { (byte0xa10x02 };   
  56.   int a = getCRC1021(tb, 2);   
  57.   String str = Integer.toHexString(a).toUpperCase();   
  58.   System.err.println("" + str);   
  59.  }   
  60.   
  61. }   
分享到:
评论

相关推荐

    CRC校验工具(CRC8,CRC16,CRC32)

    本工具支持常用的所有CRC校验 比如: CRC-4/TU CRC-5/EPC CRC-5/ITU CRC-6/TU CRC-7/MMC CRC-8 CRC-8/ITU CRC-8/ROHC CRC-8/MAXIM CRC-16/BM CRC-16/MAXIM CRC-16/USB CRC-16/MODBUS CRC-16/CCITT CRC-16/CCITT-...

    CRC-32,CRC-8校验c++实现.pdf

    CRC-8的实现简单地展示了如何通过位操作计算一个8位的CRC校验值。这个例子中定义了一个名为`CRC8`的函数,它接收一个字符指针`buffer`作为输入。函数首先将CRC初始化为0,然后遍历缓冲区中的每个字节,对每个字节...

    labview实现CRC校验-16.vi

    适用于labview的基础小白,当然相当于一个模块,懒得自己做也可以去下载。

    CRC16-CCITT(ox8408)校验算法

    2. **存储系统**:如磁盘分区表、FAT文件系统等也会使用CRC校验来确保数据的完整性。 3. **通信设备**:例如蓝牙、ZigBee、GSM等无线通信协议。 4. **数据文件**:某些特定格式的文件,如PNG图像文件、MOD音频文件等...

    [LabVIEW]实现CRC校验

    1. **理解CRC算法**:CRC校验基于特定的生成多项式,这个多项式是一个二进制数,例如CRC-16常用的生成多项式是`X^16 + X^15 + X^2 + 1`,表示为二进制`1100110000010001`。LabVIEW中的CRC实现需要知道这个生成多项式...

    CRC16校验-Javascript代码

    - **CRC-CCITT** (多项式:0x1021) - **CRC-16/ARINC** (多项式:0x8005) - **CRC-16-ANSI** (多项式:0x8005) CRC16的具体计算步骤如下: 1. **初始化寄存器**:设置一个初始值(通常是全1或全0),这个值将会被...

    通用 CRC算法 的纯Rust实现_rust_代码_下载

    CRC-3/GSM,CRC-3/ROHC,CRC-4/G-704,CRC-4/INTERLAKEN,CRC-5/EPC-C1G2,CRC-5/G-704,CRC-5/USB,CRC-6/CDMA2000-A, CRC-6/CDMA2000-B,CRC-6/DARC,CRC-6/G-704,CRC-6/GSM,CRC-7/MMC,CRC-7/ROHC,CRC-7/UMTS,CRC-8/AUTOSAR...

    CRC.rar_CRC ITU_CRC ITU-T_CRC-16_ITU-T crc_crc

    在标题和描述中提到的“CRC-16”是CRC校验中的一种特定版本,它使用16位的校验码。"CRC-ITU"和"CRC-ITU-T"指的是国际电信联盟(ITU)推荐的CRC标准,通常在通信协议和数据传输中被广泛应用。 CRC-16的工作原理基于...

    labview CRC-16校验计算

    CRC即循环冗余校验码(Cyclic Redundancy Check [1] ):是数据通信领域中最常用的一种查错校验...本程序使用labview2017编写可以直接使用,后台未加密,常数的标明了数据类型,CRC-16只是一种,还有CRC-16/CCITT FALSH等

    CRC-32和CRC-32/MPEG-2校验源码-Labview版本

    CRC-32和CRC-32/MPEG-2的校验方法实现源码-Labview版本(2015),提供2种CRC-32的labview方法,提供CRC-32/MPEG-2校验的Labview版本(2015)方法和MATLAB function函数,可以在simunlink嵌入式function调用。

    基于C++的串口数据CRC-16校验实现与应用

    主要内容:本文提供了利用C++实现CRC-16校验的一个简洁程序样例。通过对输入序列进行按字节逐位异或运算完成CRC-16检验,帮助确保通过串口通信所传送的数据完整性。附带详细的注解有助于开发者快速理解和运用该方法...

    CRC-CCITT-16校验

    CRC16-CCITT是CRC校验的一种特定实现,主要用于16位的校验,尤其适用于串行通信和网络协议。 CRC16-CCITT,也被称为Kermit CRC,是由国际电报电话咨询委员会(CCITT,现为ITU-T)定义的一种标准。它的生成多项式为G...

    C# 实现CRC校验算法源码

    在本项目中,"C# 实现CRC校验算法源码"是一个控制台应用程序,用户可以通过交互式界面输入需要校验的数据,程序会根据预设的CRC校验规则计算并返回校验码。这个程序的核心是CRC计算函数,它通常会使用位操作来实现,...

    S7-200的CRC校验程序

    S7-200的CRC校验程序正是针对这一需求设计的,它可以帮助用户生成或验证MODBUS通信中的CRC校验码。 CRC的工作原理基于多项式除法,通过对数据进行特定的数学运算来生成一个短的校验码。这个校验码能够检测出数据...

    CRC32-IEEE802.3,CRC16-CCITT,异或校验,整形转浮点,AES加密,AES解密

    CRC32-IEEE802.3,CRC16-CCITT,异或校验,整形转浮点,AES加密,AES解密

    labview CRC16-MODBUS

    对于CRC16-MODBUS的应用,LabVIEW提供了内置函数和工具,使得开发者可以方便地实现CRC校验功能,与MODBUS设备进行通信。 在CRC16-MODBUS的实现中,通常会用到以下LabVIEW函数: 1. CRC模块:LabVIEW的函数库中包含...

    java实现CRC16校验功能

    1. `int calculateCRC16(byte[] data)`:此方法接收一个字节数组作为输入,对这些字节进行CRC16计算,并返回16位的CRC校验和。 2. `boolean verifyCRC16(byte[] originalData, byte[] receivedData)`:此方法用于...

    最全CRC16计算代码(包含直接计算和查表以及表格计算 内含MODBUS/CCITT/CCITT-FALSE/XMODEN等多种校验方式)

    收集整理最全的CRC16计算,C语言代码,包括CRC16-IBM/CRC16-MAXIM/CRC16-USB/CRC16-MODBUS/CRC16-CCITT/CRC16-CCITT-FALSE/CRC16-X25/CRC16-XMODEN/CRC16-DNP。 每种代码都包含查表和计算方式。还可以计算CRC表并...

    crc16校验java实现

    从数据头到校验码前的CRC16-CCITT的校验值,遵循大端排序方式的规定。CRC16-CCITT码生成多项式为x16+x12+x5+1,简记式1021。

Global site tag (gtag.js) - Google Analytics