我要用C语言编写CRC16效验码。通过输入一个串然后计算出CRC16效验码。例如:输入010600001388计算得到849C
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性 查看原帖>>
这种程序自己做的好,到网上看看串口通讯的中断程序例程,不是什么太难的东西。自己做出来的才有提高。
int cal_crc(unsigned char *ptr, unsigned char len){
unsigned char i;
unsigned int crc_value =0;
while(len--)
{
for(i=0x80; i!=0; i>>=1 )
{
if (crc_value&0x8000)
crc_value = (crc_value << 1) ^0x8005 ;
else
crc_value = crc_value << 1 ;
if(*ptr&i)
另外,站长团上有产品团购,便宜有保证
网站上的算法大都是查512字节表的,对单片机来讲,太浪费空间了。
根据老古网上资料,修改并测试通过以下算法:
unsigned int crc_ta[16]={
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
};
unsigned int Crc16(unsigned char *ptr, unsigned char len)
{
unsigned int crc;
unsigned char da;
crc=0;
while(len--!=0)
{
da=crc>>12;
crc<<=4;
crc^=crc_ta[da^(*ptr/16)];
da=crc>>12;
crc<<=4;
crc^=crc_ta[da^(*ptr&0x0f)];
ptr++;
}
return(crc);
}
C语言中<CR>是什么意思?
在C语言中,代表了一个特殊字符,它在文本处理中扮演着换行符的角色。这个字符在不同操作系统中有着不同的含义。在Dos和Windows系统中,通常与LF(换行符)组合使用,表示从当前行结束并开始下一行,用ASCII代码13(0x0D)和10(0x0A)分别表示。而在UNIX\/Linux和Mac OS系统中,换行符仅由LF表示,...
c语言中的cr表示什么意思?
大写字母C,下标n,上标m,表示从n个元素中取出m个元素的不同的方法数.如从5个人中选2人去开会,不同的选法有C(5,2)=10种。C(n,m)的计算方法是C(n,m)=n!\/[m!(n-m)!]=n*(n-1)*...*(n-m+1)\/[1*2*...*m],如C(5,2)=[5*4]\/[1*2]=10。
<cr>在c语言中是什么意思
在C语言中,代表回车字符,是CarriageReturn的缩写,它用于表示一行的结束。C语言程序中,语句的结束标志是分号,每一条语句都必须以分号结束,否则编译器会报错,然而,这并不包括字符串,字符串是由双引号包围的字符序列,可以跨越多行,直到遇到匹配的结束双引号为止,在这些情况下是用来表示回车,也就...
C语言中<CR>是什么意思
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。 扫描二维码下载× 个人、企业类侵权投诉 违法有害信息,请在下方选择后提交 类别 色情低俗 涉嫌违法犯罪 时政信息不实 垃圾广告 低质灌水 我们会通过消息、邮箱等方式尽快将举报结果通知您。 说明 0\/200 提交 取消 领取奖励 我的财富值 --...
C语言中<CR>是什么意思
特别是在编辑程序代码时. 有时候代码在编辑器中显示正常, 但在编辑时却会因为换行符问题而出错.很多文本\/代码编辑器带有换行符转换功能, 使用这个功能可以将文本文件中的换行符在不同格式单互换.不管在C语言还是其他语言中,CR,LF的定义是不会法神个变化的。基本上如上所述。
怎么在C语言环境里输出ASCII里的13,也就是输出:CR 回车(13 CR )
'\\r'是回车(ASCII码为10,回到本行行首),'\\n'是换行(ASCII码为13,到下一行行首),如何处理ASCII码为13的数据,就看你的需要了,如果当做字符看,则13为换行,如果当做整数看,那就是13喽!int ch = 13;printf("%c",ch); \/\/ 输出新行符 printf("%d",ch); \/\/ 输出13 ...
C语言当运行以下程序时,从键盘输入:ab<CR> c <CR> def <CR> (<CR>...
);for (i=0;i<N; i++)putchar(c[i]);} 解释如下 getcgar()用来读取单个字符 素以依次输入ab<CR>c<CR>def<CR>时有 c[0]=a、c[1]=b、c[2]=<CR>、c[3]=c、c[4]=<CR>、c[5]=d 所以e、f没有存储到数组中去,最后一个<CR>为输入的结束标志 因此结果为 ab c d ...
cr是什么意思数学集合
在C语言中,cr表示回车,在C中表示字符‘r’。c语言是一种面向过程的抽象通用编程语言,广泛使用于底层开发。c语言可以用简单的方式编译处理低级内存。c语言是一种只产生少量机器语言,不需要任何运行环境支持就能运行的高效编程语言。相关知识:在文本处理中,CR、LF、Cr\/LF和CR\/LF是在不同操作系统中...
怎样用c语言编写程序输出26个英文字母?
include<stdio.h> int main(){ int i;for(i=0;i<26;i++)printf("%c ",i+'A');for(i=0;i<26;i++)printf("%c ",i+'a');return 0;}
cr是什么意思?
cr的意思就是回车。在C中就是字符'\\r'的意思。而C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。在文本处理中, CR, LF, CR\/LF是不同操作系统...
智闹螺旋: int cal_crc(unsigned char *ptr, unsigned char len) { unsigned char i; unsigned int crc_value =0; while(len--) { for(i=0x80; i!=0; i>>=1 ) { if (crc_value&0x8000) crc_value = (crc_value << 1) ^0x8005 ; else crc_value = crc_value << 1 ; if(*ptr&i) 另外,站长团上有产品团购,便宜有保证
蔡甸区13493298983: C语言零基础,怎么用C语言实现CRC16检验码 - ?
智闹螺旋: 1.系统先把所有的float转换为double类型运算,最终得到的结果截取前七个作为有效数字,这样做可以使计算结果更准确. 2.有效数字:从左边第一个不是0的数字起,到精确到的位数止,所有的数字都叫做这个数的有效数字.比如:1.24的有效...
蔡甸区13493298983: 求教C语言编写的CRC16的校验程序 - ?
智闹螺旋: unsigned short crc_dsp(unsigned short reg, unsigned char data_crc) //reg为crc寄存器, data_crc为将要处理的8bit数据流 { unsigned short msb; //crc寄存器将移出的最高1bit unsigned short data; unsigned short gx = 0x8005, i = 0; //i为左移次数, ...
蔡甸区13493298983: 求一个C语言实现的CRC16位校验码生成程序,不用实现校验,只要给定一个待传输数,能生成最终CRC码就好. - ?
智闹螺旋: 答案应该是:fcs-32
蔡甸区13493298983: CRC编码编程实验 - ?
智闹螺旋: 在用C 语言编写CRC 校验码的实现程序时我们应该注意,生成多项式 对应的十六进制数为0x18005,由 于CRC 寄存器左移过程中,移出的最高位为1 时与 相异或,所以与16bit 的CRC 寄存器对应的生成多项 式的十六进制数可用0x8005 表示....
蔡甸区13493298983: 用C语言实现CRC编码程序 - ?
智闹螺旋: #include <stdio.h> #include <string.h> #include "stdlib.h" unsigned int char2int(char *str) {unsigned int count=0, ret=0;for(count = 0; count<strlen(str);count++){ret = ret<<1;if('0' != str[count]){ ret+=1;}}return ret; }unsigned int getR(char *str...
蔡甸区13493298983: C语言编程,得到crc校验结果为4406,要如何将它和之前的data[6]一起放入Newdata[8],变成 新的Newdata[8] - ?
智闹螺旋: char i; for (i=0; i Newdata[i] = data[i]; Newdata[i++] = (crc16>>8)&0xFF; Newdata[i++] = crc16&0xFF;
蔡甸区13493298983: C语言中CRC循环校验的一个程序 - ?
智闹螺旋: while(len--!=0) 这句的len的值循环一次就减少1,先执行len!=0,再执行len--.当len为0时退出循环.for(i=0x80; i!=0; i/=2) 0x80是十六进制数,也即128 当i!=0时,执行循环体,然后i=i/2,即i值减半.
蔡甸区13493298983: 用C++或C语言编一个CRC校验程序,求救啊,可以发邮箱里?
智闹螺旋: string CRC(string a,string b){ //CRC校验,a为被除数,b为除数(a,b均为二进制字符串) string s1,s2,temp; int len; len = b.length(); for(int i=0;i<len-1;i++) a.append("0"); while(a.length()>=b.length()){ s2 = ""; s1 = a.substr(0,len); a = a....
蔡甸区13493298983: CRC校验四种算法,哪种最优? - ?
智闹螺旋: 基于位运算的算法是非常慢的而且效率很低.因此,在实际使用中不推荐使用“计算法”来生成CRC校验码,而建议使用“查表法”来进行CRC校验码计算.半查表法既计算又查表,表占用空间小,适合小文件或者数据包校验;全查表法是标准查表法;双8位表全查表法表量大,查询方便,适合大文件校验.因此,如果你的磁盘文件体积一般,建议使用全查表法,如果比较大如安装包,建议使用双8位表全查表法.