常用c语言算法大集合

常用c语言算法大集合

ID:30225881

大小:72.00 KB

页数:26页

时间:2018-12-28

常用c语言算法大集合_第1页
常用c语言算法大集合_第2页
常用c语言算法大集合_第3页
常用c语言算法大集合_第4页
常用c语言算法大集合_第5页
资源描述:

《常用c语言算法大集合》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案常用C语言算法大集合//CRC校验算法unsignedcharS[130];//原始数据为128字节,CRC校验2字节unsignedintCRC()//CRC校验算法(共130字节){unsignedinti,j,m,n,p,q,c=0x1021;m=S[0]*256+S[1];//首先取两个字节,拼成16位整数,作为基数for(i=1;i<=64;i++){//其余128字节分64批处理,每批2字节n=S[2*i]*256+S[2*i+1];//取两个字节,拼成16位整数for(j=0;j<16;j++){//每批计算16次,每次处理1比特p=m&0x8000;

2、//保留基数的最高位q=n&0x8000;//保留当前整数的最高位m<<=1;n<<=1;//两者均左移一位if(q)m++;//当前整数的最高位拼入基数的最低位if(p)m^=c;//如果基数移出的最高位为1,则“减去”0x1021}}returnm;//返回校验结果}main(){inti;unsignedintc;for(i=0;i<128;i++)S[i]=i;//设置128字节原始数据S[128]=S[129]=0;//将最后两个字节设置为零c=CRC();//进行CRC校验S[128]=c/256;S[129]=c%256;//将校验结果装入最后两个字节c=CRC(

3、);//再进行CRC校验,结果应该为零S[4]^=0x20;//引入一个差错c=CRC();//再进行CRC校验,结果不为零,发现差错S[6]^=0xff;//再引入8个差错c=CRC();//再进行CRC校验,结果不为零,发现差错while(1);//在这一行设置断点,中止程序运行,以便观察程序运行的结果}//8比特汉明码模拟通讯程序#define  N  8  //原始数据的字节数unsignedcharHM[16]={0x00,0x71,0xB2,0xC3,0xD4,0xA5,0x66,0x17,//编码表     0xE8,0x99,0x5A,0x2B,0x3C精彩文档

4、实用标准文案,0x4D,0x8E,0xFF};unsignedcharerr[8]={0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//错误图样unsignedcharS[N]={0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0};//原始数据unsignedcharD[2*N];//原始数据的汉明码(发送的内容)unsignedcharR[N];//解码结果(接收的内容)voidTRANS(  )//编码程序(模拟发送){unsignedcharc1,c2;inti,j;for(i=0,j=0;i

5、{//每字节原始数据编码为两个字节c1=S[i]/16;//c1为原始数据的高4位c2=S[i]%16;//c2为原始数据的低4位D[j++]=HM[c1];//按编码表对c1进行编码D[j++]=HM[c2];//按编码表对c2进行编码}}unsignedcharparity(unsignedcharch)//偶校验{inti;unsignedchark=0;for(i=0;i<8;i++){if(ch&0x01)k^=0x01;ch>>=1;}returnk;}unsignedcharUNHM(unsignedcharch)//汉明码解码算法{unsignedcharc,p

6、,q0,q1,q2;p  =parity(ch);//保存全字节偶校验结果q0=parity(ch&0x4d);//对D1、D3、D5、D7进行偶校验q1=parity(ch&0x2b);//对D2、D3、D6、D7进行偶校验q2=parity(ch&0x17);//对D4、D5、D6、D7进行偶校验c=q0

7、q1<<1

8、q2<<2;//拼装校验结果,得到错误图样ch^=err[c];//按错误图样进行纠错ch&=0x0f;//取出4比特信息内容if(c&&!p)ch+=0x20;//发现两个差错return精彩文档实用标准文案ch;}//将接收到的两字节信息解码拼装为一字节数

9、据intRECEV()//解码程序(模拟接收){inti,j,k=1;//初始化解码成功标志unsignedcharc1,c2;for(i=0,j=0;i16){k=0;c1&=0x0f;}//差错判断c2=UNHM(D[j++]);//再解码一字节if(c2>16){k=0;c2&=0x0f;}//差错判断R[i]=c1*16+c2;//拼装为一字节数据}returnk;//返回解码是否成功的信息}main(){in

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。