⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jm4.c

📁 通信中的压缩、解压缩。利用相对编码的原理
💻 C
字号:
#include <stdio.h>
#include <math.h>

int m=1,k=4,n=50,count,cnt=2;
int b,c,d,d1,z,w1,w2,f,i;
double a,s,b1;
double x[50]={29.3,29.3,29.3,29.3,29.4,29.3,29.5,29.5,29.3,29.5,29.5,29.6,29.8,29.6,29.3,29.5,29.6,29.5,29.3,29.6,29.5,29.7,29.7,29.6,29.7,29.6,29.5,29.5,29.5,29.5,29.6,29.5,29.6,29.6,29.6,29.6,29.6,29.7,29.5,29.6,29.5,29.6,29.7,29.8,29.6,29.7,29.7,29.6,29.7,29.7};
char y[100];
double J[100];
double *p1;
char *p2;
double *p3;

main()
{
p1=x;
p2=y;
a=x[0];
z=floor(a);
b=10*(a-z);
*p2=z;
p2++;
*p2=b;


while(m<n)
{
m++;p1++;//压缩
d1=10*(*p1-a);
d=abs(10*(*p1-a));
a=*p1;
if(d<7)
{
   if(k%2==0)
   {
      p2++;
	  k++;
	  if(d1>0)
	     *p2=d;
	  else
		  *p2=d|8;
      }
   else
   {
	   k++;
       if(d1>0)
		   *p2=(*p2)|(d<<4);
	   else
           *p2=(*p2)|((d|8)<<4);//要求将最高位置1
	 
	   
   }
}
else
{
   if(k%2==0)
   {
     p2++;
	 *p2=255;
     z=floor(a);
	 p2++;
	 *p2=z;
	 c=10*(a-z);
	 p2++;
	 *p2=c;
	 k=k+6;
   }
   else
   {
       *p2=*p2|240;
	   z=floor(a);
	   p2++;
	   *p2=z;
	   c=10*(a-z);
	   p2++;
	   *p2=c;
	   k=k+5;
   }
}
}
c=k%2;
if(c==0)
count=k/2;
else
count=(k+1)/2;
printf("%d,",count);

p2=y;//以下是解压,解压后误差最大为正负0.2
p3=J;
w1=*p2;
p2++;
w2=*p2;
s=w1+0.1*w2;
J[0]=s;
while(cnt<count)
{
p2++;
f=(*p2)&15;
if(f==15)
{
   p2++;
   w1=*p2;
   p2++;
   w2=*p2;
   p3++;
   s=w1+0.1*w2;
   *p3=s;
   cnt=cnt+3;
}
else
{
  if((f&8)!=0)
    b1=-(f&7);
  else
	  b1=f&7;
  p3++;
  *p3=s+0.1*b1;
  s=*p3;
  f=((*p2)&240)>>4;
  if(f==15)
  {
     p2++;
	 w1=*p2;
     p2++;
	 w2=*p2;
     s=w1+0.1*w2;
	 p3++;
	 *p3=s;
     cnt=cnt+3;
  }
  else
  {
      if((f&8)!=0)
      b1=-(f&7);
      else
	  b1=f&7;
     p3++;
     *p3=s+0.1*b1;
	 s=*p3;
     cnt++;  
  }
}
}
for(i=0;i<n;i++)
printf("J[%d]=%f",i+1,J[i]);
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -