CRC-16/XMODE X16+X12+X5+1 C#、C和java环境下实现
private byte[] CRC(byte[] x, int len) //CRC校验函数
{
byte[] temdata = new byte[];
UInt16 crc = ;
byte da;
int i = ;
UInt16[] yu = { 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef };
while (len-- != )
{ da = (byte)(((byte)(crc / )) / );
crc <<= ;
crc ^= yu[da ^ x[i] / ];
da = (byte)(((byte)(crc / )) / );
crc <<= ;
crc ^= yu[da ^ x[i] & 0x0f];
i++;
}
temdata[] = (byte)(crc & 0xFF);
temdata[] = (byte)(crc >> );
return temdata;
}
 /*
 ****************************************************************************
 函数原型:uint16_t GetCRC16(char * addr,uint32_t length);
 函数功能:计算帧的CRC16校验值  包括帧头和数据段部分
 入口参数: addr:待校验的数据部分起始地址
            length:数据长度(bytes)                  
 返 回 值: CRC16校验值
 注意事项: 无
 ****************************************************************************
 */
 uint16_t GetCRC16(char * addr,uint32_t length)
 {
  uint16_t crc;
  uint8_t da;
  uint16_t crc_ta[]={ /* CRC 余式表 */
    0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
    0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef};
   crc = ;
   while(length--!=)
   {
       da=((uint8_t)(crc/))/; /* 暂存 CRC 的高四位 */
       crc <<= ; /* CRC右移4 位,相当于取CRC 的低12 位)*/
       crc ^= crc_ta[da^(*addr/)]; /* CRC 的高4 位和本字节的前半字节相加后查表计算CRC,然后加上上一次 CRC 的余数 */
       da = ((uint8_t)(crc/))/; /* 暂存 CRC 的高4 位 */
       crc <<= ; /* CRC 右移4 位, 相当于 CRC 的低12 位) */
       crc ^= crc_ta[da^(*addr&0x0f)]; /* CRC 的高4 位和本字节的后半字节相加后查表计算CRC,然后再加上上一次 CRC 的余数 */
       addr++;
   }
     return (crc); 
1 public class CRC { 
2
 3     private static int poly = 0x1021;
 4     private static int table[] = { /* CRC1021*/
 5          0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
 6           0x8108,
 7           0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231,
 8            0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339,
 9            0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462,
10           0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a,
11            0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653,
12            0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b,
13            0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4,
14            0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc,
15            0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5,
16            0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd,
17           0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6,
18            0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae,
19            0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97,
20            0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f,
21            0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188,
22            0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080,
23            0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9,
24            0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1,
25            0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea,
26            0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2,
27            0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db,
28            0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3,
29            0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c,
30            0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844,
31            0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d,
32            0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75,
33            0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e,
34            0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26,
35            0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f,
36            0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17,
37            0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 };
38
39     public static int getCrc(byte[] bs)
40     {
41         int crc =0;
42
43         for(byte b : bs)
44         {
45
46             crc =  ((crc << 8) | b & 0xff) ^ table[ (crc >> 8 ) & 0xff];
47         }
48         return crc & 0xffff;
49     }
50
51     public static void main(String str[])
52     {
53         byte bs[] = new byte[]{0x12,0x34,0x56,0x78,0x00,0x00};  //此时算的是0x123456   结果 b42c
54         System.out.println(Integer.toHexString( getCrc(bs)));
55     }
56 }  
集思广益、开源共享!
CRC-16/XMODE X16+X12+X5+1 C#、C和java环境下实现的更多相关文章
- FPGA CRC-16/XMODEM       x16+x12+x5+1
		module crc_16( input clk, input [47:0]mac, input rst, input hash_enable,//哈希控制器使能位 output reg hash_c ... 
- 痞子衡嵌入式:在IAR开发环境下为工程开启CRC完整性校验功能的方法
		大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下为工程开启CRC完整性校验功能的方法. CRC校验在嵌入式领域里的应用非常广,比如在通信领域,CRC检验值可以作为数据 ... 
- CRC(16位)多项式为 X16+X15+X2+1
		其对应校验二进制位列为1 1000 0000 0000 0101,可这有17位啊,我怎么和16位信息进行异或啊?是不是不要最高位的1 你没有弄明白crc的意思.这17位后面再添上16个零,然后开始抑或 ... 
- C# CRC - 16
		using System; static class Program { static void Main() { string input = "8000"; var bytes ... 
- Modbus CRC 16 (C#)
		算法 1.预置一个值为 0xFFFF 的 16 位寄存器,此寄存器为 CRC 寄存器. 2.把第 1 个 8 位二进制数据(即通信消息帧的第 1 个字节)与 16 位的 CRC 寄存器相异或,异或的结 ... 
- HJ212 CRC 16 (C#)
		算法 CRC16 校验寄存器赋值为 0xFFFF: 取被校验串的第一个字节赋值给临时寄存器: 临时寄存器与 CRC16 校验寄存器的高位字节进行"异或"运算,赋值给 CRC16 校 ... 
- Java 编程下字符串的 16 位、32位 MD5 加密
		package cn.sunzn.md5; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExcept ... 
- PHP正则匹配6到16位字符组合(且只能为数字、字母、下划线)
		php正则匹配6到16位的字符串. 只允许包含数字.字母.下划线组成的6到16位字符,符合返回ture,否则返回false. 解答: 6到16位,正则可以这样写:{6,16}. 任意的字符6到16位的 ... 
- Ubuntu 18.04 环境下 kubernetes v1.16.2 单机部署说明
		一.安装环境 本次部署使用阿里云ECS 操作系统: Ubuntu 18.04 64位 实例规格: ecs.c6.large 2U4G 二.kubernetes 版本 k8s.gcr.io/kube- ... 
随机推荐
- Linux 查看CPU,内存,硬盘 !转
			Linux 查看CPU,内存,硬盘 本文转自:http://hi.baidu.com/mumachuntian/item/a401368dbe8a66cab07154e8 1 查看CPU 1.1 查看 ... 
- sql 去除重复记录
			1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select peopleId from ... 
- 读<你必须知道的.NET>IL指令笔记
			IL指令笔记: 1.newObj和initObj MSDN解释:newObj用于分配和初始化对象,而initObj用户初始化值类型 newObj解释: (1):从托管堆分配指定类型所需要的全部内存空间 ... 
- 直接拿来用!超实用的Java数组技巧攻略
			java编程语言经验分享 摘要:本文分享了关于Java数组最顶级的11大方法,帮助你解决工作流程问题,无论是运用在团队环境或是在私人项目中,你都可以直接拿来用. 本文分享了关于Java数组最顶级的11 ... 
- Stanford机器学习---第六讲. 怎样选择机器学习方法、系统
			原文:http://blog.csdn.net/abcjennifer/article/details/7797502 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ... 
- Coursera台大机器学习课程笔记8 -- Linear Regression
			之前一直在讲机器为什么能够学习,从这节课开始讲一些基本的机器学习算法,也就是机器如何学习. 这节课讲的是线性回归,从使Ein最小化出发来,介绍了 Hat Matrix,要理解其中的几何意义.最后对比了 ... 
- Mysql_以案例为基准之查询
			查询数据操作 
- i686和x86_64的区别
			找回TCL隐藏分区(转载) 用Wubi安装 Ubuntu 出现(Initranfs)问题的解决方案 i686和x86_64的区别 2009-04-11 08:19:31| 分类: 电脑问题 | 标 ... 
- jQuery 效果函数
			jQuery 效果函数 方法 描述 animate() 对被选元素应用“自定义”的动画 clearQueue() 对被选元素移除所有排队的函数(仍未运行的) delay() 对被选元素的所有排队函数( ... 
- POJ 3083
			---恢复内容开始--- http://poj.org/problem?id=3083 题目大意就是给你要你从S走到E,且只有.代表的地方才是可以走的,有三种方式的走法. 一.是向左优先转,从S到E的 ... 
