HDB3码编码C语言实现
直奔主题
#include"stdio.h"
#include"string"
void HDB3(char *input_zifu)
{
char output_shuzi[50]={0};
int i,flag0=0,flag1=0;
int lastV=-1,last_shuzi=-1;
for(i=0;input_zifu[i]!='\0';i++)
{
if(input_zifu[i]=='0')//如果本位为0
{
++flag0;//记录出现0的个数
if(flag0==4)//连续出现4个0,第四个0必改V
{
flag0=0;//对0的计数重新开始
lastV*=-1;//每出现4个0必有V且极性交替
//lastV=1 ? output_shuzi[i]=2 : output_shuzi[i]=-2;//V先用数字2代替,正负交替
output_shuzi[i]=(lastV==1) ? 2:-2;//V先用数字2代替,正负交替
//if(lastV==1) output_shuzi[i]=2;
//if(lastV==-1) output_shuzi[i]=-2;
if(lastV!=last_shuzi)//如果V与前一个数字符号不同,则第一个0变B
{
//last_shuzi=1 ? output_shuzi[i-3]=-3 : output_shuzi[i-3]=3;
output_shuzi[i-3]=(last_shuzi==1) ? -3:3;//B先用数字3代替,与前一个数字符号相反
//if(last_shuzi==1) output_shuzi[i-3]=-3;
//if(last_shuzi==-1) output_shuzi[i-3]=3;
}
last_shuzi=lastV;//出现V后,正负号从V开始重新交替
}
else
{
output_shuzi[i]=9;//因为不定长数组内出现数字0后无法得知数组长度,所以用9代替0
}
}
else//如果本位是1
{
flag0=0;//0的个数清零,重新记录
last_shuzi*=-1; output_shuzi[i]=last_shuzi;//第一个1从+1开始交替
}
}
printf("HDB3码为:\n");
for(i=0;output_shuzi[i]!=0;i++)
{
switch(output_shuzi[i])//将转换后数组内容以HDB3码的形式输出
{
case 9:printf("0"); break;
case -1:printf("-1");break;
case 1:printf("+1");break;
case -2:printf("-V");break;
case 2:printf("+V");break;
case -3:printf("-B");break;
case 3:printf("+B");break;
}
}
printf("\n");
}int main(void)
{
char IN_ZIFU[50]={0};
while(1)
{
printf("请输入消息码:\n");
scanf("%s",IN_ZIFU);
HDB3(IN_ZIFU);
}
//printf("%d\n",(int)IN_ZIFU[0]-48);//字符转数字-48
return 0;
}
HDB3码编码C语言实现相关推荐
- cmi编码实验_【2017年整理】实验及HDB3码CMI码编码.ppt
[2017年整理]实验及HDB3码CMI码编码 实验地点: 三楼最西边 通信工程系办公室 HDB3码(三阶高密度双极性码) 编码规则: 把消息代码变换成AMI码.检查AMI码的连0串情况. 当没有4个 ...
- c语言海明校验码编码,海明校验码的编码规则有哪些?
在海明码中, 位号数(1.2.3.--.n)为2的权值的那些位,即: 1(2^0).2(2^1).4(2^2).8(2^3).-2^(r-1)位,作为奇偶校验位,并记作: P1.P2.P3 .P4.- ...
- 打码(C语言)常见粗心小错误 (前方高能,一定要点)
打码(C语言)常见粗心小错误 标签(空格分隔): 博客 自我介绍 本人学院 (http://sdcs.sysu.edu.cn/) 欢迎访问 本人学号 16340213 目录 打码C语言常见粗心小错误 ...
- 信道编码之纠删码编码
简介 随着数据的存储呈现出集中化(以分布式存储系统为基础的云存储系统)和移动化(互联网移动终端)的趋势,数据可靠性愈发引起大家的重视.集群所承载的数据量大大上升,但存储介质本身的可靠性进步却很小,这要 ...
- 条形码和二维码编码解码工具类源码
有一个好的工具,会让你的开发事半功倍.再将讲这个工具类之前,我先给小白补充一点条形码和二维码(以下基础知识选自,我本科阶段的一本教材:<物联网导论>(刘云浩 编著).有对物联网感兴趣的,可 ...
- 一文带你看懂算术编码(C语言)
算术编码C语言 简介 算术编码是图像压缩的主要算法之一. 是一种无损数据压缩方法,也是一种熵编码的方法.和其它熵编码方法不同的地方在于,其他的熵编码方法通常是把输入的消息分割为符号,然后对每个符号进行 ...
- 信息论 输入概率的哈夫曼编码 C语言
信息论 哈夫曼编码 C语言 哈夫曼编码是一种效率比较高的变长无失真信源编码方法.哈夫曼编码的编码方法,步骤如下: 将信源符号按概率从大到小的顺序排列,为方便起见,令p(a1)>=p(a2)> ...
- 格雷码编码+解码+实现(Python)
01 二值码 02 格雷码编码 2.1 编码优点 2.2 编码生成 2.3 递归生成 2.4 二值码转换 2.5 编码图 03 格雷码投影 3.1 投影图案生成 3.2 DLP投影图像 04 格雷码解 ...
- 【RS码1】系统RS码编码原理及MATLAB实现(不使用MATLAB库函数)
关注公号[逆向通信猿]更精彩!!! 基础知识 要想搞懂本节知识,需要先熟悉掌握以下前几篇博客 [多元域乘法]多项式乘法电路原理及MATLAB详解 [多元域除法]多项式除法电路原理及MATLAB详解 R ...
- c语言即时通讯软件源码,即时通讯软件源码-基于c语言即时通讯软件代码实现
我不知道哪种语言无关紧要.开源,我不知道该用什么. 即时通讯软件源代码为JAVA语言 对于即时通讯软件源代码最好是用C语言编写的,想学一下,感谢您即时通讯软件有什么. includewinscock2 ...
最新文章
- 清华大学大数据研究中心“RONG”奖学金申请通知
- SAP PM 初级系列之27 – SAP系统怎么知道某种类型的维修工单检验批上的检验类型是14?
- mysql联合查询数量不一致_Mybatis关联查询,查询出的记录数量与数据库直接查询不一致,如何解决?...
- Linux Kernel Development——列出系统中所有的进程
- python管道安装包_Python 炫技操作:安装包的八种方法
- springmvc的主要功能_Spring MVC入门
- Docker - 导出导入容器
- 开放式可编程保险市场Tidal Finance完成由KR1领投的195万美元种子轮融资
- python基础判断题汇总_python基础 判断题
- LINUX使用chrpath更改编译结果的rpath
- onclick获取当前节点
- 组态王gprs虚拟服务器,GPRS/CDMA 网络通过组态王软件虚拟串口(IO/设备)实现无线远程...
- 数据结构初阶——二叉树
- 新产品开发过程基本原则
- 原生js动态添加元素
- 影响塑料制品注塑质量的因素,以及解决方案
- iFunk翼只换不修强出新高度
- 电子设计(1)二极管防电源反接电路
- Dubbo相关问题如何用管程实现异步转同步?
- WAVE绘制频谱图(三)——PCM数据处理以及图谱显示
热门文章
- 云IDE:CodeSandbox: 快速进行前端开发的云IDE
- 软件测试怎么测微信朋友圈,面试题:如何测试微信朋友圈(附图)
- 光学软件国产化项目开发心得
- 武汉大学计算机学院电子与通信工程,武汉大学电子信息学院信息与通信工程
- word查重_2020论文查重倾情分享 | 查重注意要点
- 小程序页面调用服务器接口授权,小程序的授权和登陆
- 刘润老师的5分钟商学院营销案例~比例偏见!
- max30102c语言程序,MAX30102基于STM32F103C8T6的程序源码
- MSC-51单片机原理与实践——第四章习题及答案解析
- rpc调用过程原理分析以及Dubbo、Feign调用过程