- 浏览: 274483 次
- 性别:
- 来自: 广州
文章分类
#include <stdio.h> int reverse_bits(int input, int bits) { int i, result = 0; for (i = 0; i < bits; i++) { result = (result << 1) | (input & 1); input >>= 1; } return result; } unsigned short crc5(unsigned char crc, unsigned char poly, unsigned char *ptr, int len) { unsigned char i; while (len--) { for (i = 0x80; i != 0; i >>= 1) { if ((crc & 0x10) != 0) { crc <<= 1; crc ^= poly; } else { crc <<= 1; } if ((*ptr & i) != 0) { crc ^= poly; } } ptr++; } return crc; } unsigned short crc7(unsigned char crc, unsigned char poly, unsigned char *ptr, int len) { unsigned char i; while (len--) { for (i = 0x80; i != 0; i >>= 1) { if ((crc & 0x40) != 0) { crc <<= 1; crc ^= poly; } else { crc <<= 1; } if ((*ptr & i) != 0) { crc ^= poly; } } ptr++; } return crc; } unsigned short crc8(unsigned char crc, unsigned char poly, unsigned char *ptr, int len) { unsigned char i; while (len--) { for (i = 0x80; i != 0; i >>= 1) { if ((crc & 0x80) != 0) { crc <<= 1; crc ^= poly; } else { crc <<= 1; } if ((*ptr & i) != 0) { crc ^= poly; } } ptr++; } return crc ^ 0x55; } unsigned short crc16(unsigned short crc, unsigned short poly, unsigned char *ptr, int len) { unsigned char i; while (len--) { for (i = 0x80; i != 0; i >>= 1) { if ((crc & 0x8000) != 0) { crc <<= 1; crc ^= poly; } else { crc <<= 1; } if ((*ptr & i) != 0) { crc ^= poly; } } ptr++; } return crc; } unsigned int crc32(unsigned int crc, unsigned int poly, unsigned char *ptr, int len) { unsigned char i; while (len--) { for (i = 0x80; i != 0; i >>= 1) { if ((crc & 0x80000000) != 0) { crc <<= 1; crc ^= poly; } else { crc <<= 1; } if ((*ptr & i) != 0) { crc ^= poly; } } ptr++; } return crc; } int main(int argc, char** argv) { unsigned char buff[] = {0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0xd2, 0xe3}; unsigned char mac_list[][6] = { {0x01, 0x00, 0x5e, 0x00, 0x00, 9}, {0x01, 0x00, 0x5e, 0x00, 0x00, 13}, {0x01, 0x00, 0x5e, 0x00, 0x00, 48}, {0x01, 0x00, 0x5e, 0x00, 0x00, 52}, {0x01, 0x00, 0x5e, 0x00, 0x00, 66} }; printf("rev: 0x%02X -> 0x%02X\n", 0x11112222, reverse_bits(0x11112222, 32)); printf("crc5: 0x%02X\n", crc5(0x09, 0x09, buff, sizeof(buff) / sizeof(buff[0]))); printf("crc7: 0x%02X\n", crc7(0x00, 0x09, buff, sizeof(buff) / sizeof(buff[0]))); printf("crc8: 0x%02X\n", crc8(0x00, 0x07, buff, sizeof(buff) / sizeof(buff[0]))); printf("crc16: 0x%04X\n", crc16(0x0000, 0x1021, buff, sizeof(buff) / sizeof(buff[0]))); printf("crc32: 0x%08X\n", crc32(0xFFFFFFFF, 0x04c11db7, buff, sizeof(buff) / sizeof(buff[0]))); /* printf("crc32: 0x%08X\n", crc32(0, 0x04c11db7, mac_list[0], 6)); printf("crc32: 0x%08X\n", crc32(0, 0x04c11db7, mac_list[1], 6)); printf("crc32: 0x%08X\n", crc32(0, 0xC704DD7B, mac_list[2], 6)); printf("crc32: 0x%08X\n", crc32(0, 0xC704DD7B, mac_list[3], 6)); printf("crc32: 0x%08X\n", crc32(0, 0xC704DD7B, mac_list[4], 6));*/ return 0; } /* test pass: crc7 --- crc-7/MMC crc16 --- crc-16/IBM crc-ccitt --- crc16-ccitt */
发表评论
-
研华推出基于Freescale i.MX53的ARM核心板
2012-02-10 13:36 1042http://www.eepw.com.cn/article/ ... -
gm8120
2011-12-06 20:37 0GM8120 -
core dump
2011-12-05 16:34 834示例程序test.c void dummy_funct ... -
linux print stack trace
2011-12-05 14:04 1007#include <execinfo ... -
I2C bus glue for Cirrus EP93xx
2011-07-26 11:44 1152转自 http://arm.cirrus.com/f ... -
ramdisk
2011-07-26 10:32 8051. download ramdisk.gz 2. g ... -
boa
2011-07-26 10:29 910compile boa 1. ./configu ... -
Linux下单网卡绑定多IP与多网卡共用单IP
2011-07-20 09:46 980在Linux下有时候需要给一个网卡绑定多个IP,本文介绍在Re ... -
实战Ubuntu下单网卡绑定多IP
2011-07-20 09:45 937常常我们有需要一个网卡象windows一样设置多个IP。 ... -
修改环境变量
2011-04-26 16:49 875gedit ~/.bash_profile ... -
编译JVM
2011-04-26 16:12 983OS: CentOS5.5 notice: remove j ... -
linux 组播支持
2011-04-20 11:42 946route add -net 224.0.0.0 netmas ... -
POSIX conformance testing by UNIFIX
2011-04-16 21:39 675换了编译器重新编译内核,启动出现POSIX confo ... -
安装glib
2011-04-16 21:38 833./configure --prefix=/usr & ... -
shine
2011-04-16 21:36 9171. /mnt/nfs # time ./shin ... -
交叉编译QT
2011-04-16 21:34 1283// 下载文件 qt-x11-opensource- ... -
sudo
2011-04-16 21:30 7921. su - 2. visudo /etc/ ... -
Unable to find the Ncurses libraries
2011-04-16 21:29 951用make menuconfig时出现错误: Una ... -
用execl实现静态ip地址
2011-04-16 21:28 831#include <stdio.h> #i ... -
linux挂载U盘
2011-04-16 21:27 8311. ~ # fdisk -l 2. ~ #mkdi ...
相关推荐
本工具支持常用的所有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-...
RTU 模式采用CRC(Cyclical Redundancy Check)侦误值。 CRC 侦误值计算以下列步骤说明: 步骤一:载入一个内容为 FFFFH 之16-bits 寄存器,称之为『CRC』寄存器。 步骤二:将指令信息的第一个位组与16-bits CRC ...
crc5_epc,crc5_itu,crc5_usb,crc6_itu,crc7_mmc,crc8,crc8_itu,crc8_rohc,crc8_maxim,crc16_ibm,crc16_maxim,crc16_usb,crc16_modbus,crc16_ccitt,crc16_ccitt_false,crc16_x25,crc16,xmodem,crc16_dnp,crc32,crc32_...
此CRC校验工具支持:CRC3、CRC4、CRC5、CRC6、CRC7、CRC8、CRC11、CRC12、CRC13、CRC14、CRC15、CRC16、CRC17、CRC21、CRC24、 CRC30、CRC31、CRC32、CRC40、CRC64、CRC82、Adler32全面的105种CRC算法,支持显示标准...
CRC计算器 CRC逆向,CRC所有参数可自定义
CRC-8 正序、CRC-8 逆序、CRC-16 (0xA001)、CRC-16 (0x8005)、CRC-16 (Modbus)、CRC-16 (Sick)、CRC-CCITT (XModem)、CRC-CCITT (0xFFFF)、CRC-CCITT (0x1D0F)、CRC-CCITT (Kermit)、CRC-DNP、IntelHex、BCC (异或...
CRC校验(循环冗余校验)小知识 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输...
CRC-8 (正序) CRC-8 (逆序) CRC-16 (0xA001) CRC-16 (0x8005) CRC-16 (Modbus) CRC-CCITT (XModem) CRC-CCITT (Kermit) CRC-DNP IntelHex BCC (异或校验) LRC (纵向冗余校验) CRC-32 (循环冗余)
unsigned int crc_cal16 (unsigned char *snd, unsigned char num){unsigned int c,crc=0xFFFF;for(i = 0; i ; i ++){c = snd[i] & 0x00FF;crc ^= c;for(j = 0;j ; j ++) {if (crc & 0x0001){crc>>=1;crc^=0xA001;}...
因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都...
以16位CRC - 16校验码为例,在对CRC校验码原理和一般的串行CRC生成算法进行分析的基础上,改进 了串行CRC算法,并进一步推导出并行CRC算法。利用Quartus II集成环境和Verilog HDL语言工具将算法转 变为校验码生成电路,...
遇到要做个CRC校验,翻了一堆资料终于看明白了,内有详细注释,不是普通的词典法,是用算法计算出来的CRC,对于CRC16-CCITT,只需替换公式即可 /* CRC16实现原理 * * CRC16 | g(x)=x16+x15+x2+1 | 0x1,80,05 | ...
CRC计算器,实现了CRC4、CRC5、CRC6、CRC7、CRC8、CRC16、CRC32等21种算法
crc8校验的原理,程序和检验软件 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 CRC校验可以简单地描述为:例如...
CAN通信采用CRC校验作为一种重要的错误检测手段,是节点判断CAN帧信息的完整性并产生确认应答的依据。 在现场总线通信和控制的实际应用中,工业应用环境往往是极端的温度以及电磁噪声或是其他的恶劣环境,系统在...
资源名:VB实现CRC校验程序源码 资源类型:程序源代码 源码说明: CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环...
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...
CRC32计算程序,生成多项式是: G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 该生成多项式是IEEE的标准,应用在ETH,wifi等多个协议里面。 电脑上的文件校验工具,也基本采用这个crc32. 用matlab...
1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’...
纯软件实现CRC32经常是借助于查表实现的,当计算CRC32过于频繁时可通硬件指令优化以减少对CPU的占用。目前Intel支持的用于计算CRC的有CRC32和PCLMULQDQ两个指令。本文仅讨论使用CRC32指令的使用。CRC32指令计算的是...