crc16的c语言函数 计算ccitt_计算CRC16校验和的函数-程序员宅基地

技术标签: crc16的c语言函数 计算ccitt  

有几个细节需要与特定的CRC实现“匹配” – 即使使用相同的多项式,也可能会有不同的结果,这是因为数据位处理方式的细微差异,使用CRC的特定初始值(有时是零,有时为0xffff),和/或反转CRC的位。 例如,有时一个实现可以从数据字节的低位开始工作,而有时他们将从高位开始工作(如您现在所做的那样)。

而且,在运行所有数据位后,您需要“推出”CRC的最后一位。

请记住,CRCalgorithm是devise用硬件来实现的,所以从软件的angular度来看,一些位sorting的处理方式可能并不那么有意义。

如果要按照lammertbies.nl CRC计算器页面上显示的多项式0x8005匹配CRC16,则需要对CRCfunction进行以下更改:

a)通过CRC循环从最低有效位而不是从最高有效位开始运行数据位

b)在完成input数据后,将CRC的最后16位推出CRC寄存器

c)反转CRC位(我猜这个位是硬件执行的结果)

所以,你的function可能如下所示:

#define CRC16 0x8005 uint16_t gen_crc16(const uint8_t *data, uint16_t size) { uint16_t out = 0; int bits_read = 0, bit_flag; /* Sanity check: */ if(data == NULL) return 0; while(size > 0) { bit_flag = out >> 15; /* Get next bit: */ out <<= 1; out |= (*data >> bits_read) & 1; // item a) work from the least significant bits /* Increment bit counter: */ bits_read++; if(bits_read > 7) { bits_read = 0; data++; size--; } /* Cycle check: */ if(bit_flag) out ^= CRC16; } // item b) "push out" the last 16 bits int i; for (i = 0; i < 16; ++i) { bit_flag = out >> 15; out <<= 1; if(bit_flag) out ^= CRC16; } // item c) reverse the bits uint16_t crc = 0; i = 0x8000; int j = 0x0001; for (; i != 0; i >>=1, j <<= 1) { if (i & out) crc |= j; } return crc; }

当我传入"123456789"时,该函数为我返回0xbb3d 。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_32818365/article/details/112810010

智能推荐

Git详解之四 服务器上的Git-程序员宅基地

文章浏览阅读168次。来自:http://www.open-open.com/lib/view/open1328069988843.html服务器上的 Git到目前为止,你应该已经学会了使用 Git 来完成日常工作。然而,如果想与他人合作,还需要一个远程的 Git 仓库。尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心就很容易弄混其他人的进度。另外,你也一定希望合作者们即使在..._here you can administer your crowd server and define your user directories,

线性回归公式推导_推公式是拟合还是线性回归-程序员宅基地

文章浏览阅读797次。推导线性回归线性回归问题就是利用一个线性的方程对已有的数据点进行拟合,目的是当拟合成功后,给你一个新的数据可以利用该线性方程得到较为准确的预测;假设,我们现在又数据集X={x1,x2,......,xm}X=\{x^{1}, x^{2},......,x^{m}\}X={x1,x2,......,xm},且其中的每一个数据xi=(x1i,x2i,......xni)x^{i}=(x^{i}_1,x^{i}_2,......x^{i}_n)xi=(x1i​,x2i​,......xni​)是nnn维向量(_推公式是拟合还是线性回归

基于小波变换的滤波算法matlab程序_小波变换matlab程序-程序员宅基地

文章浏览阅读4.9k次,点赞5次,收藏18次。function ynewq = func_wavelet_filter(Signal);num = 220;coef = 3;ynewq = zeros(1,length(Signal));x = zeros(1,1024);xx = zeros(1,num);b = zeros(1,21);for i=1:1:length(Signal) if i<=1024 ynewq(i) = Signal(i); ..._小波变换matlab程序

Linux磁盘扩容LVM_物理分区/dev/sdx容量扩大,怎么扩展 到lvm里去呢-程序员宅基地

文章浏览阅读295次。在安装系统的时候我选择的是自动分区,系统就会自动以LVM的方式分区。为了保证系统后期的可用性,建议所有新系统安装都采用LVM。LVM结构图 扩容步骤 1. 查看磁盘设备 命令:# fdisk -l 结果:Disk /dev/sda: 697.9 GB, 697932185600 bytes255 heads, 63 sectors/track, 84852 cylindersUnits = c..._物理分区/dev/sdx容量扩大,怎么扩展 到lvm里去呢

springboot启动 java.lang.ref.ReferenceQueue.remove、com.mysql.jdbc.AbandonedConnectionCleanupThread.run_springboot出现 com.mysql.cj.jdbc.abandonedconnection-程序员宅基地

文章浏览阅读1.1k次。java.lang.Object.wait(Native Method)java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)2021-05-16 20:06:25.409 INFO 3860 --- [ main] Condi..._springboot出现 com.mysql.cj.jdbc.abandonedconnectioncleanupthread

eNSP命令及组建简单局域网并使各PC连通(DHCP)_ensp 由pc1\pc2\pc3\pc4组建的局域网-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏49次。eNSP的使用文章目录前言1、安装eNSP安装设置兼容性检测是否安装成功2、软件的使用设备介绍简单 局域网组建设备基础配置命令配置使用ping命令检测网络连通性DHCP服务 --动态主机配置协议PC通过DHCP获取ip地址,所有PC可相互访问前言**第二天学习,使用eNSP组建简单网络,使所有PC可以互相访问**1、安装eNSP安装使用eNSP前,需要以下按顺序安装exe文件最好按默认设置安装WinPcap_4_1_3Wireshark-win61-3.0.2Oracle._ensp 由pc1\pc2\pc3\pc4组建的局域网

随便推点

超强!QQ资料竟然这么写,你的怎么写?_qq资料公司填什么-程序员宅基地

文章浏览阅读1k次。 一、上网了吧,网恋了吧,幼稚思想受骗了吧?网恋了吧,投入了吧,感情走上绝路了吧?投入了吧,见面了吧,没有以前来电了吧?见面了吧,后悔了吧,美眉变成恐龙了吧?后悔了吧,倒霉了吧,感情投资浪费了吧?倒霉了吧,想死了吧,以后不敢上网了吧?二、个女人都是为爱而折翼的天使,她们来到人间,就再也回不去天堂了,所以需要男人好好的珍惜。我也是天使,不过降落的时候不小心脸先着地了,回不去天堂是因为体重的原因。还好_qq资料公司填什么

海思AI芯片(HI35xx):tensorflow转caffemodel之模型参数转换_海思 tensorflow 转换-程序员宅基地

文章浏览阅读930次。摘要:要把自己的模型进行移植,之前是后端的移植,最近前端也提了需求,前端一般都是用海思芯片(海思HI3516DV300),只支持caffe,所以为了先测试时间得把tf的模型转成caffemodel。这里是将tf1.x转为caffemode,后续补全darknet转为caffemode一、转换ckpt转caffemodel转换代码:# coding=utf-8# Author : AnnSun# Created date: 2020-06-23# from __future_海思 tensorflow 转换

Mybatis Mybatis-plus配置多数据源,连接多数据库_mybatisplus配置多个库-程序员宅基地

文章浏览阅读3.8k次,点赞2次,收藏13次。工作的时候,遇到了需要将一个数据库的一些数据插入或更新到另一个数据库。一开始使用(这句sql语句的意思是:将val1,val2值插入到TABLE表的col1和col2字段中,如果出现主键或唯一冲突,就进行更新,只将col1值更新为val1)进行数据的插入和更新。但是每次都要对着这一条sql语句进行修改,十分麻烦,就想着能否同时连接两个数据库进行业务处理。深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。_mybatisplus配置多个库

Copilot 自动编程AI工具_ai自动编程-程序员宅基地

文章浏览阅读8.6k次。OpenAI与GitHub联合构建的AI自动编程工具Copilot,Copilot基于自然语言处理模型GPT-3搭建而成,Copilot预览版已经正式上线Visual Studio Code平台OpenAI的GPT-3初识2019年DOTA2的顶级赛事TI8的正赛完成,OpenAI以2:0完胜了OGOpenAI开始转战自然语言处理领域,OpenAI发布了全新一代的NLP模型——GPT-3GPT-3商业应用CopilotGPT-3最火的阶段,代码补全这个应用虽然也被业界关注.._ai自动编程

【科技百咖】30年专注网络安全,江民科技不止是杀毒-程序员宅基地

文章浏览阅读479次。改版声明重整旗鼓,再出发!时光如白驹过隙,世事如白云苍狗。2019年上半年已过,下半年已悄然来临。中国软件网对微信订阅号对内容重新进行规划。每周微信的头条文章调整为:“科..._中国网络安全30年

GD32 DMA串口接收发送_gd32 串口dma收发-程序员宅基地

文章浏览阅读1.2w次,点赞6次,收藏47次。最近,工作上需要将mlx90640的数据通过串口传出去,而数据比较大,发送得比较慢,就想着看能不能用DMA来发送看速度会不会快点。_gd32 串口dma收发

推荐文章

热门文章

相关标签