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

📄 jm2.c

📁 通信中的数据压缩、解压缩。存放原始数据与与此数据的差值。差值超出范围后更新原始数据。(编程背景为温室温度测量
💻 C
字号:
#include <stdio.h>
#include <math.h>

int m=1,k=4,n=50,count,cnt=1;
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(d1);
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);
	   
   }
}
else
{a=*p1;
   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;
   }

}
}
if((k%2)==0)
count=k/2;
else
count=(k+1)/2;
printf("%d",count);

p2=y;//以下是解压,解压后误差最大为正负0.1
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;
  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;
     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 + -