CRC-16/XMODE X16+X12+X5+1 C#环境下实现

private byte[] CRC(byte[] x, int len) //CRC校验函数
{
byte[] temdata = new byte[2];
UInt16 crc = 0;
byte da;
int i = 0;
UInt16[] yu = { 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef };
while (len-- != 0)
{

da = (byte)(((byte)(crc / 256)) / 16);
crc <<= 4;
crc ^= yu[da ^ x[i] / 16];
da = (byte)(((byte)(crc / 256)) / 16);
crc <<= 4;
crc ^= yu[da ^ x[i] & 0x0f];
i++;
}
temdata[0] = (byte)(crc & 0xFF);
temdata[1] = (byte)(crc >> 8);
return temdata;
}

时间: 2024-11-05 23:24:59

CRC-16/XMODE X16+X12+X5+1 C#环境下实现的相关文章

java CRC(1021型, x16+x12+x5+1)

public class crcMain {     //crc16 -1021型校验,      //CRC16-CCITT  x16+x12+x5+1   1021   ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCSpublic static int[] Crc16Calc(byte[] data_arr, int data_len){    int crc16 = 0;        int i;        for(i =0; i < (data

CRC(16位)多项式为 X16+X15+X2+1

其对应校验二进制位列为1 1000 0000 0000 0101,可这有17位啊,我怎么和16位信息进行异或啊?是不是不要最高位的1 你没有弄明白crc的意思.这17位后面再添上16个零,然后开始抑或运算.共33位.从前到后运算,一位一位来:当这一位数值是1的时候就取这一位开始往后的16位与校验多项式异或,结果顶替对应的16位数值:当这一位数值是0的时候跳过.前17位算完了(其实也都清零了),剩下16位就是crc校验值了. 假设生成多项式为:G(X)=X16+X15+X2+1,它产生的校验码为多

在centos7.4环境下安装用cm5.16安装CDH

修改ip 然后重启/etc/init.d/netwrok restart PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no IPV6_AUTOCONF=no IPV6_DEFROUTE=no IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens32 UUID=a0ad438d-

Ubuntu 18.04 环境下 kubernetes v1.16.2 单机部署说明

一.安装环境 本次部署使用阿里云ECS 操作系统: Ubuntu  18.04 64位 实例规格: ecs.c6.large 2U4G 二.kubernetes 版本 k8s.gcr.io/kube-apiserver:v1.16.2 k8s.gcr.io/kube-controller-manager:v1.16.2 k8s.gcr.io/kube-scheduler:v1.16.2 k8s.gcr.io/kube-proxy:v1.16.2 k8s.gcr.io/pause:3.1 k8s.

unbuntu 16.04.2 安装 Eclipse C++开发环境

1.安装JAVA (1)首先添加源: sudo gedit /etc/apt/sources.list 在打开的文件中添加如下内容并保存: deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial maindeb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main (2)安装密钥: sudo apt-key adv --keyserver hkp://key

Ubuntu16.04~16.10(php7.0)网站环境一键搭建脚本

将附件下载解压上传到服务器 首先给解压出来的脚本文件给予权限(这里的文件名是:Ubuntu16.x-php7.0.sh) chmod a+x Ubuntu16.x-php7.0.sh 然后执行: sh ./Ubuntu16.x-php7.0.sh 等待过程中会出现让你设置数据库密码 最后大功告成!访问下你的网站或者服务器IP试试! 脚本下载地址:点击下载 加压密码:izchuan.com

metronic 4.5.7开发环境下, 在Windows 10上安装了10.16.0版本的node js之后,导致node sass无法加载

解决办法: 修改metronic 中的package.json文件, 将gulp-sass的依赖项版本改为3.2.1即可解决 { "name": "metronic", "version": "4.5.7", "description": "Metronic by Keenthemes", "main": "gulpfile.js", "

16 搭建Spring Data JPA的开发环境

使用Spring Data JPA,需要整合Spring与Spring Data JPA,并且需要提供JPA的服务提供者hibernate,所以需要导入spring相关坐标,hibernate坐标,数据库驱动坐标等 <properties> <spring.version>4.2.4.RELEASE</spring.version> <hibernate.version>5.0.7.Final</hibernate.version> <sl

Redis源码中的CRC校验码(crc16、crc64)原理浅析

在阅读Redis源码的时候,看到了两个文件:crc16.c.crc64.c.下面我抛砖引玉,简析一下原理. CRC即循环冗余校验码,是信息系统中一种常见的检错码.大学课程中的"计算机网络"."计算机组成"等课程中都有提及.我们可能都了解它的数学原理,在试卷上手工计算一个CRC校验码,并不是难事.但是计算机不是人,现实世界中的数学原理需要转化为计算机算法才能实现目的.实际上作为计算机专业背景人并不会经常使用或接触到CRC的计算机算法实现的原理,通常是电子学科背景的人士