crc算法经常用到,如下总结了常用的三种。有兴趣的copy回家用。 呵呵 crc16算法和代码如下 [code] unsigned short crc16(char *data_p, unsigned short length) { unsigned char i; unsigned int data; unsigned int crc = 0xffff; if (length == 0) return (~crc); do { for (i=0, data=(unsigned int)0xff & *data_p++; i < 8; ...
public class crc16 { private char[] crc_tb = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x344...
以下的代码是我翻译过来的计算crc16的代码,但计算结果与标准结果刚好颠倒,例如我的代码计算出来的结果是BBA2,但标准答案是A2BB 有人帮我吗? public class crcCaculate { public crcCaculate() { } static int[] auchcrcHi = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC...
从百度tieba得到了crc16的perl脚本,不是很清楚原理,有大侠可以解释一下吗?我想改为crc32的功能,但是crc多项式要可以配置,比如通过poly引用,不知道应该如何修改?? sub crc16{ my $init = shift; my $poly = shift; my $val = shift; die "Undefined crc value" unless defined $val && defined $poly && defined $init; my $var; for (my $i=0; $i<8; $i++) { $var = $val << 8; $var ^= $init; $init += $...
package com.sunwei.sim4xian; import sun.misc.crc16; public class crc16Util { private static final byte[] hex = "0123456789ABCDEF".getBytes(); public static int getcrc16(byte[] data) { int crcTABLE[] = { 0xF078, 0xE1F1, 0xD36A, 0xC2E3, 0xB65C, 0xA7D5, 0x954E, 0x84C7, 0x7C30, 0x6DB9, 0x5F22, 0x4EAB, 0x3A14, 0x2B9D, 0x1906, 0x088F, 0xE0F9, 0xF170, 0xC3...
16位crc校验原理与算法分析 这里,不讨论crc的纠错原理以及为什么要选下面提及的生成多项式,只是针对以下的生成多项式,如何获得crc校验码,作一个比较详细的说明。 标准crc生成多项式如下表: 名称 生成多项式 简记式* 标准引用 crc-4 x4+x+1 3 ITU G.704 crc-8 x8+x5+x4+1 0x31 crc-8 x8+x2+x1+1 ...
modbus协议 摘 要:工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。modbus就是工业控制器的网络协议中的一种。 关键词:modbus协议;串行通信;LRC校验;crc校验;RS-232C 一、modbus 协议简介 modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用...
unsigned char send[8] = { 0x01, 0x03, 0x0C, 0xCA, 0x00, 0x06, 0xE6, 0xA6 }; write(fd, send, 8); int buf_len = 5 + 6 * 2; unsigned char buffer[buf_len]; bzero(buffer, buf_len); usleep(200000); read(fd, buffer, buf_len); int i; for (i = 0; i < buf_len; i++) { printf("%02X", buffer); } printf("\n"); 为什么读到的数据buffer中,大于0x80的,都被减去了0x80, 实际数据应该是: 0x01 0x03 0x0C 0x12 0x...