| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 529 人关注过本帖
标题:hdb3编解码源程序(可能有bug,希望大家雅正)
只看楼主 加入收藏
天际1
Rank: 2
等 级:论坛游民
帖 子:10
专家分:13
注 册:2010-8-22
收藏
 问题点数:0 回复次数:0 
hdb3编解码源程序(可能有bug,希望大家雅正)
程序代码:
#include<stdio.h>
#include<math.h>


//计算数据串的长度
int convert(char *str)
{for(int i=0;str[i]!='\0';i++)
{}
return i;}
//void jiaoti(char*str,int m,int i,int *c)
//{
//int t=i+1;
//m=m+c[i];
//if(str[m]==str[m-1])}


//编码

void encoding(char *str)
{int i=0,m=0,n=1,b=0,sum=0;
int c[10000]={0},t[10000]={0};
int len=convert(str);

for(i;str[i]!='\0';i++)//编成AMI码
{str[i]=str[i]-48;
    if(str[i]==1)
{str[i]=pow(-1,m);
m++;
b++;
t[m]=b;//记录两个相邻的超过四个零的0组之间1的个数
n=1;}
else
{
c[m]=n;//记录0的个数
n++;
if(c[m]>3)
b=0;}
}

//当前面大于4个零时
if(c[0]>3)
{ if(c[0]<8)
   {str[0]=1;//第一个零为1
   str[3]=str[0];//第四个零为1
   //后面的传号码交替
     int t=1;
     m=0;
      m=m+c[0];
      if(str[m]==str[m-c[0]+3])
      {str[m]=(-1)*str[m];
  for(m;c[t]<4;)

 
  {m=m+c[t]+1;
  str[m]=(-1)*str[m];
  t++;}}
   }
  else//当前面的零为8个时
  {str[0]=1;
  str[3]=str[0];
  str[4]=(-1)*str[3];
  str[7]=str[4];
  }
  sum=sum+c[0];
}



 for(i=1;i<len;i++)

 {
     if(c[i]<4)

 sum=sum+c[i];//记录在0前面的0的总数
 else

   if(c[i]<8)//小于8个0
   {int n=1;
   for(n;n<i;)
       if(c[n]<4)
       n++;
       else break;
       if(n<i&&t[i]%2==0)//前面有偶数个1
       {m=sum+i;//定位1
      
       str[m]=(-1)*str[m-1];
       str[m+3]=str[m];
       //后面的数交替
        int t=i+1;
      m=m+c[i];
      if(str[m]==str[m-c[i]+3])
      {str[m]=(-1)*str[m];
  for(m;c[t]<4;)
  {
  {m=m+c[t]+1;
  str[m]=(-1)*str[m];
  t++;}}
  sum=sum+c[i];}}
       else//前面有奇数个1(包括第一数为1时第一个大于四个零的零组前面有偶数个1的情况)
       {m=sum+i;
       str[m+3]=str[m-1];sum=sum+c[i];}
   }
   else//等于8
   {  int n=1;
   for(n;n<i;)
       if(c[n]<4)
       n++;
       else break;
       if(n<i&&t[i]%2==0)//前面有偶数个1
   {   m=sum+i;
       str[m]=(-1)*str[m-1];
       str[m+3]=str[m];
       str[m+4]=(-1)*str[m+3];
       str[m+7]=str[m+4];
       /*for(m=m+c[i];str[m]!=0;m++)
       {
           str[m]=(-1)*str[m-c[i]+7];}*/
       sum=sum+c[i];}
  

 
      else//前面有奇数个1(包括第一数为1时第一个大于四个零的零组前面有偶数个1的情况)

      { m=sum+i;
          str[m+3]=str[m-1];
          str[m+4]=(-1)*str[m+3];
              str[m+7]=str[m+4];
   //后面的数交替
  
  
      int t=i+1;
      m=m+c[i];
      if(str[m]==str[m-1])
      {str[m]=(-1)*str[m];
  for(m;c[t]<4;)
  {
  {m=m+c[t]+1;
  str[m]=(-1)*str[m];
  t++;}}
  }

 
  sum=sum+c[i];}}


  

 }


}


//解码程序
void decoding(char *str,int len)
{

int i=0,n=1;

for(i;i<len;i++)//把字符对应的数值化为整数1,0,-1
{if(str[i]!=45)
{str[i]=str[i]-48;}
else
{str[i]=-1;
int t=i+1;
for(t;t<len;t++)
{str[t]=str[t+1];}
len--;}}
//开始解码
for(i=0;i<len;i++)
{
if(pow(str[i],2)==1)//当这个数和他的后面的第三个数相同时。这两个数都是零
{if(str[i]==str[i+3])
{str[i]=0;
str[i+3]=0;}
else
if(str[i+3]==0&&str[i]==str[i+4])//当这个数和他后面第四个数相同且第三个数为零时第四个数为零
str[i+4]=0;}}
for(i=0;i<len;i++)
{str[i]=pow(str[i],2);}
//输出自然码
for(i=0;i<len;i++)
{printf("%d ",str[i]);}
}


int main()
{char str[10000];//={'1','0','0','0','1','0','0','0','0','0','0','0','0','1','1'};
printf("        *************************************************************\n");
printf("        *                                                           *\n");
printf("        *                   HDB3编解码程序                          *\n");
printf("        *                                                           *\n");
printf("        *************************************************************\n");

printf("                                                   作者:天际\n\n ");
printf("                                           版权所有,如有雷同,纯属偶然\n");
start:printf("操作方法:\n");

 printf("\n");

 printf("1.编码    2. 解码  3. 推出  \n\n");

 printf("请输入任务编号:");

 int len;

 char c[1000];

 scanf("%s",c);
if(c[0]==49)
{printf("请输入自然码:");
scanf("%s",&str);
  len=convert(str);
encoding(str);

 printf("HDB3码为:");

 for(int i=0;i<len;i++)

 {printf("%d ",str[i]);}

 printf("\n");

 goto start;}

else

  if(c[0]==50)
  {printf("HDB3码为:");
      scanf("%s",&str);
      printf("\n");
    len=convert(str);
  printf("自然码为:");
  decoding(str,len);
  goto start;}
  else
    if(c[0]==51)
        return 0;
  
     

}
搜索更多相关主题的帖子: bug 解码 
2010-10-26 19:48
快速回复:hdb3编解码源程序(可能有bug,希望大家雅正)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019358 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved