CRC-CCITT 标准CRC16(1021) 算法校验类

CRC16校验学习总结 1、CRC16校验使用说明 CRC校验原理在我的上篇博客CRC校验学习总结中有详细的讲解,可以参考了解,下面直接讲解常用的CRC16校验使用。 根据Modbus协议,常规485通讯的信息发送形式如下:   地址 功能码 数据信息 校验码   1byte 1byte nbyte 2byte   CRC校验是前面几段数据内容的校验值,为一个16位数据,发送时,低8位... 阅读详情
AI摘要

本文提供了一种针对CRC-CCITT标准CRC16(1021)的校验算法实现,通过详细代码示例展示了如何计算CRC校验值,并提供了在线校验地址进行验证。此外,还扩展了CRC校验功能,包括源数据校验和部分数据校验。

 最新新遇到设备采用CRC-CCITT 标准CRC16(1021),网上很多相关文章,但是大都结果不对。以下代码来自https://bbs.youkuaiyun.com/topics/390876846回答中的代码 

代码如下:

 public static String getCRC16_CCITT(String Source)
        {
            int crc = 0xFFFF;          // initial value
            int polynomial = 0x1021;   // 0001 0000 0010 0001  (0, 5, 12) 
            String tmp = "";
            byte[] bytes = new byte[Source.Length / 2];
            for (int i = 0; i < Source.Length - 1; i++)
            {
                if (i % 2 == 0)
                {
                    tmp = Source.Substring(i, 2);
                    bytes[i / 2] = (byte)Int16.Parse(tmp, System.Globalization.NumberStyles.HexNumber);
                }
            }
            foreach (byte b in bytes)
            {
                for (int i = 0; i < 8; i++)
                {
                    bool bit = ((b >> (7 - i) & 1) == 1);
                    bool c15 = ((crc >> 15 & 1) == 1);
                    crc <<= 1;
                    if (c15 ^ bit) crc ^= polynomial;
                }
            }
            crc &= 0xffff;
            string strDest = crc.ToString("X");
            return strDest;
        }

测试:

02383638343734303435383131393731301909062046375D1104400000

得出结果为:F5E3

另附CRC在线校验地址:https://www.lammertbies.nl/comm/info/crc-calculation.html

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2019.09.16更新

基于上面的代码,做了一些扩展

public class CRC_CCITT_1021
    {
        /// <summary>
        /// CRC 校验
        /// </summary>
        /// <param name="Source">待校验数值</param>
        /// <returns>true为校验成功,false为校验失败</returns>
        public static bool CheckCrc(string Source)
        {
            return string.Compare(getCRC16_CCITT2(Source.Substring(0,Source.Length-4)), Source.Substring(Source.Length-4), true) == 0;
        }

        /// <summary>
        /// CRC 校验
        /// </summary>
        /// <param name="Source">待校验数值</param>
        /// <param name="result">校验结果</param>
        /// <returns>true为校验成功,false为校验失败</returns>
        public static bool CheckCrc(string Source,string result)
        {
            return string.Compare( getCRC16_CCITT2(Source),result,true)==0;
        }
        /// <summary>
        /// 计算CRC
        /// </summary>
        /// <param name="Source">源数据</param>
        /// <param name="offset">起始位置</param>
        /// <param name="length">数据长度</param>
        /// <returns>校验结果</returns>
        public static String getCRC16_CCITT(String Source, int offset, int length)
        {
            return getCRC16_CCITT2(Source.Substring(offset, length));
        }
        /// <summary>
        /// 计算CRC
        /// </summary>
        /// <param name="Source">源数据</param>
        /// <returns>校验结果</returns>
        public static String getCRC16_CCITT2(String Source)
        {
            int crc = 0xFFFF;          // initial value
            int polynomial = 0x1021;   // 0001 0000 0010 0001  (0, 5, 12) 
            String tmp = "";
            byte[] bytes = new byte[Source.Length / 2];
            for (int i = 0; i < Source.Length - 1; i++)
            {
                if (i % 2 == 0)
                {
                    tmp = Source.Substring(i, 2);
                    bytes[i / 2] = (byte)Int16.Parse(tmp, System.Globalization.NumberStyles.HexNumber);
                }
            }
            foreach (byte b in bytes)
            {
                for (int i = 0; i < 8; i++)
                {
                    bool bit = ((b >> (7 - i) & 1) == 1);
                    bool c15 = ((crc >> 15 & 1) == 1);
                    crc <<= 1;
                    if (c15 ^ bit) crc ^= polynomial;
                }
            }
            crc &= 0xffff;
            string strDest = crc.ToString("X");
            return strDest;
        }
    }

 

crc16的c语言函数 计算ccitt_CRC16常见几个标准的算法及C语言实现 转载: http://blog.youkuaiyun.com/leumber/article/details/54311811 CRC16常见的标准有以下几种,被用在各个规范中,其算法原理基本一致,就是在数据的输入和输出有所差异,下边把这些标准的差异列出,并给出C语言的算法实现。CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异... 阅读详情

相关推荐

JavaScript实现crc校验(附完整源码)

JavaScript实现crc校验(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1179

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

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

sineat 2958

使用C#实现CRC16校验算法

在实现过程中,使用了常量Polynomial表示CRC16多项式,在每个字节处理完毕后,对寄存器进行了一次右移操作,并判断最低位是否为1,如果是则进行了一次按位异或运算。CRC校验是一种常用的数据校验方法,通过计算数据的CRC校验值来验证数据是否被修改或损坏。其过程是将要校验的数据按照预定义的多项式进行位运算,得到一个16位的校验码。通过本文的示例和源代码,读者可以了解到CRC校验的基本原理和具体实现过程,在需要进行数据校验时,可以使用该算法进行快速、准确的校验。使用C#实现CRC16校验算法。

ByteLegend的博客 2660

CCITT标准CRC16(1021) Java代码

背景:与GPS运营商做数据对接,图片、GPS、轨迹所有数据fj

javaee_ssh的专栏 1万+

VHDL实现CCITT标准CRC16校验项目实战

CCITT(Consultative Committee for International Telegraph and Telephone),即国际电报电话咨询委员会,成立于1865年,是一个国际组织,专注于电报和电话领域的国际标准制定。后来在1993年,CCITT与国际无线电咨询委员会(CCIR)合并,形成了现今的国际电信联盟(ITU)下属的电信标准化部门(ITU-T)。CCITT在促进全球通信设备和通信协议的互操作性方面发挥了重要作用,制定了一系列影响深远的国际通信标准。

weixin_42298254的博客 1034

VTK基础教程(1)- vtkPolyData 介绍

目录 VTK的编译与环境搭建 VTK一般渲染流程 VTK数据类型-vtkPolyData 使用vtk自带的多边形数据 使用自己创建的数据 添加顶点颜色 添加面颜色 VTK的编译与环境搭建 这部分目前已经有了大佬做了成熟的傻瓜式配置,大家可以参考这篇文章:VTK+VS2019(或其他版本均可) 傻瓜式一站式 配置_Nancy_fairy的博客-优快云博客_vs2019 vtk VTK一般渲染流程 这部分的介绍也很多,大家可以参考这篇文章:VTK笔记-了解VTK_黑山老妖的博客.

qq_35769071的博客 9054

汽车电子 -- CCITT标准CRC16(1021)

【代码】汽车电子 -- CCITT标准CRC16(1021)

不积跬步,无以至千里 965

QT+SOEM主站协议库实战指南—从编译到嵌入式应用

本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。

u6v7w8x的博客 438

crc 16 1021 java_CRC-CCITT 标准CRC16(1021) 算法校验类

package org.david.tools.util;/*** @File_Name CRCUtil.java* @Author David.Lee* @Date 2018年2月9日 下午2:26:38* @Copyright 2018 www.zhihu.com/people/david.lee9 Inc. All rights reserved.* @Description CRC-CCI...

weixin_36162906的博客 708

三维空间刚体运动4-3:四元数线性插值方法:Squad

摘要:四元数插值三个方法Slerp、Squad和Spring既复杂又很重要,为了详细阐述,故每个方法独立成一篇博文讲解,没有插值的四元数是没有灵魂的,插值的重要性不言而喻。Slerp是经典的两点间一阶连续可导插值方法,Squad方法在Slerp的基础上实现多点间的一阶连续可导,而Spring则可以实现多点间的二阶连续可导,更适合复杂的曲线,此系列博文也是国内首篇介绍Spring的中文资料。

shao918516的博客 9217

Buck电源设计常见的一些问题(四)MOS管振荡抑制方法(二)

另一方面,开关振铃为远超开关频率的高频振铃,并伴随很高的 dV/dt,会带来传导和辐射的 EMI 问题,可能会使得终端产品不能通过 EMI 标准测试,更严重时甚至会干扰开关电源自身的信号电路或临近的其他功能电路的正常工作。选用二极管反向特性好的器件;该电路可等效成图 3 中 LC 谐振电路,新的 LR和 CR为 Lp1、Lp5,Lp3, Lp4, CD等所有参与振铃的寄生感容的复合值。通常 Snubber 的 Csnub取值在数 nF 以上,在振铃频率 fR(加了 snubber 后)下的阻抗很小。

小幽余生不加糖 2892

crc16-ccitt算法c语言,CRC-CCITT 标准CRC16(1021) 算法校验类

最新新遇到设备采用CRC-CCITT 标准CRC16(1021),网上很多相关文章,但是大都结果不对。以下代码来自https://bbs.youkuaiyun.com/topics/390876846回答中的代码代码如下:public static String getCRC16_CCITT(String Source){int crc = 0xFFFF; // initial valuei...

weixin_28760959的博客 1532

PyCharm配置SSH和SFTP远程连接服务器

关于这篇博文,主要因为公司企业都是通过本地测试,同步到服务器进行跑动,舍友看着同事丝滑的操作,让我做个教程。本着钻研的精神,写下了这篇博客记录 关于pycharm这个软件,只有专业版才有远程连接的这个配置,社区版没有(同事一再强调要专业版,学生认证还可申请免费) 关于SSH和SFTP都是一种协议 具体知识点补充可看我这篇文章: 【计算机网络】常见面试题集锦(全) SSH:提供安全通道进行远程登录 SFTP协议可以远程文件传输获取等,数据的安全传输主要由SSH连接提供

码农研究僧的博客 5533

crc 16 1021 java_【软件升级】CCITT标准CRC16(1021)算法 Java代码【转】

转自https://blog.youkuaiyun.com/ywb201314/article/details/52083036packagecom.jst.util;/***CRC-CCITT算法校验类**@authoramadowang*@version[版本号,Aug29,2011]*@see[相关类/方法]*@since[产品/模块版本]*@date2012-10-24...

weixin_35758901的博客 423

《MATLAB项目实战》,专栏目录和介绍

MATLAB 是一款强大且广泛应用的数值计算和数据可视化软件工具,它提供了一个高效、简洁的编程环境,使用户能够进行从简单的矩阵运算到复杂的多维数据分析的各种计算任务。无论是在人工智能、计算机视觉、图像处理还是其他领域,MATLAB 都能够提供精准、快速的解决方案,因此成为了全球科研人员、工程师以及数据分析师的得力工具。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6478

Rockchip eMMC寿命监控:SMART信息读取与预防性维护

擦写计数坏块数量温度使用时间。

小灰灰的博客 763

CRC16常见几个标准的算法及C语言实现

CRC16常见的标准有以下几种,被用在各个规范中,其算法原理基本一致,就是在数据的输入和输出有所差异,下边把这些标准的差异列出,并给出C语言的算法实现。 CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或 CRC16_CCITT_FALSE:多项式x16+x12+x5+1(0x1021),初始值0xFFFF,低...

leumber的专栏 10万+

极验验证码: 一点即过验证(鼠标轨迹分析)

2、第一个验证接口分析(第一个w值还原) 3、第二个验证接口(第二个w值还原)这里定位w生成跟上篇文章一样,就不展开了;主要分析tt值(鼠标轨迹)的生成逻辑

qq_49268524的博客 1009

C语言版CRC-16系列校验算法

一、CRC16校验码的使用 现选择最常用的CRC-16校验,说明它的使用方法。   根据Modbus协议,常规485通讯的信息发送形式如下:   地址 功能码 数据信息 校验码   1byte 1byte nbyte 2byte   CRC校验是前面几段数据内容的校验值,为一个16位数据,发送时,低8位在前,高8为最后。   例如:信息字段代码为: 1011001,校验字段为:1010。   发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10   信息字段 校验字段   

qq_44764418的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

CRC-16原理及通用的16位CRC校验算法代码

CRC-16原理及通用的16位CRC校验算法代码 环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。 给出查表算法代码和通用的16位CRC校验算法代码供参考。

ydyuse的专栏 4万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

得到CRC16校验码的常见几个标准的算法及C语言实现

CRC16常见的标准有以下几种,被用在各个规范中,其算法原理基本一致,就是在数据的输入和输出有所差异,下边把这些标准的差异列出,并给出C语言的算法实现。 CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或 CRC16_CCITT_FALSE:多项式x16+x12+x5+1(0x1021),初始值0xFFFF,低......

魏波 8121

crc16几种标准校验算法及c语言代码

一、CRC16校验码的使用   现选择最常用的CRC-16校验,说明它的使用方法。   根据Modbus协议,常规485通讯的信息发送形式如下:   地址 功能码 数据信息 校验码   1byte 1byte nbyte 2byte   CRC校验是前面几段数据内容的校验值,为一个16位数据,发送时,低8位在前,高8为最后。   例如:信息字段代码为: 1011001,校验字段为:1010。   发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10   信息字段 校验字...

minyuanxiani的专栏 7621

CRC16算法及C语言实现

3.判断最高位,若该位为 0 左移一位,若为 1 左移一位再与多项式Hex码异或。5.重复将所有输入数据操作完成以上步骤,所得16位数即16位CRC校验码。但是CRC16只取低16位,写成16进制数就是 0x1021。1.根据CRC16的标准选择初值CRCIn的值。2.将数据的第一个字节与CRCIn高8位异或。x16表示第16位为1,x5表示第5位为1。4.重复3直至8位全部移位计算结束。如x16+x12+x5+1。

那里有颗树 1万+
上一篇: 十六进制转ASCII
下一篇: js加入随机数防浏览器缓存
风凌119
博客等级 码龄10年 5粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值