大三上信息论与编码实验——汉明码的编码过程的c++实现
来源:互联网 发布:黎明杀机淘宝刷血点 编辑:程序博客网 时间:2024/05/22 13:31
汉明码是信道编码的一种,详情可百度,一下给出汉明码的一种实现方式:
#include<iostream>#include<string>#include<stdlib.h>#include<time.h>using namespace std;int main(){srand((int)time(0));string xinxi1;//需要编码的二进制序列//随机生成一个长度最长为248的二进制序列//unsigned int xinxi_length = rand() % 248 + 1;//for (unsigned int i = 0; i < xinxi_length; i++) {//xinxi.push_back(rand() % 2 + 48);//}//cout << "随机生成的二进制序列为" << xinxi << endl;//手动输入一个二进制序列和这个二进制序列的长度unsigned int xinxi_length;cin >> xinxi1 >> xinxi_length;string xinxi;for (int i = xinxi1.size() - 1; i >= 0; i--) {xinxi.push_back(xinxi1[i]);}cout << xinxi << endl;//编码过程unsigned int a = 128, jiaoyan=7;for (; xinxi_length + jiaoyan < a; jiaoyan--, a /= 2);jiaoyan++;cout << xinxi_length << " " << jiaoyan << endl;//将信息位存入最后要输出的编码序列string bianma(xinxi_length+jiaoyan,0);for (unsigned int i = 1, j = 1, k = 0; j <= xinxi_length + jiaoyan; j++) {if (j == i) {i *= 2;bianma[j - 1] = ' ';}else {bianma[j - 1] = xinxi[k];k++;}}cout << bianma << endl;//ch用来存最高为八位的校验位char ch;for (unsigned int i = 0; i < xinxi_length + jiaoyan; i++) {if (bianma[i] == '1') {ch = i+1;break;}}for (unsigned int i = ch; i < xinxi_length + jiaoyan; i++) {if (bianma[i] == '1') {ch = ch ^ (char)(i+1);}}for (unsigned int i = 0, j = 1; i < jiaoyan; i++) {if ((ch & 1 << i) != 0) {bianma[j - 1] = '1';}else {bianma[j - 1] = '0';}j *= 2;}string bianma1;for (int i = bianma.size() - 1; i >= 0; i--) {bianma1.push_back(bianma[i]);}cout << bianma1 << endl;//cout << "输入一个七位汉明码:" << endl;//string hanming;//cin >> hanming;//char b[4];system("pause");return 0;}
代码写的并不规范,很多地方都写的很蠢,有很多可以优化的地方;
在网上找到过一些利用生成矩阵实现的汉明码编码,但因对其原理并不了解,便用其它方法实现了一个汉明码编码;
下次要实现的是输入一个接收到的汉明码然后对其进行纠错和译码。
0 0
- 大三上信息论与编码实验——汉明码的编码过程的c++实现
- 信息论实验-信源编码2(Lz编码和算数编码的C++实现)
- 信息论与编码——密码史的发展
- 汉明码编码的纠错原理
- 汉明码的编码和译码
- 汉明码编码的纠错原理
- 信息论的编码
- 汉明码编码与译码
- [信息论]Huffman编码的JAVA实现
- 信息论实验-Hamming编码
- 信息论与编码复习
- 信息论与编码 上机
- 信息论与编码题库
- [信息论]S.F.E编码的JAVA实现
- 我用过的信息论与编码教材
- 信息论与编码——DES数据加密标准
- 《C编码实践篇》实验二——命令行菜单小程序的实现
- 信息论与编码相关知识点
- Android 里的各种通信方式(二)
- 学习5——node.js安装及MongoDB数据库连接
- 随想录——关于内存泄漏查找代码
- Session 3: Deploying OpenStack (PackStack and DevStack)
- DuiVision控件开发指南
- 大三上信息论与编码实验——汉明码的编码过程的c++实现
- eclipse 下maven 创建工程 catalog的问题
- CentOS下安装svn,添加新用户,重启svn服务(找到安装成功的案例)
- Session 4: Deploying a Virtual Machine from Horizon
- 【Android】Android6.0及以上不能读取外部存储问题
- 51单片机bit数据类型
- c语言实现输出二维蛇形矩阵
- Session 5: Managing OpenStack from the Command Line
- 【miscellaneous】MPEG2、MPEG4、H264的差异