这是用C++编的一个ASCII码压缩算法
本来输入1234567891929394时,应该输出8c 22 b8 ce db dc 5d
但却输出0c a2 b8 ce db 5c dd 0
找了很久了,没有找到出错原因,望高手看看.
小弟谢谢了
#include <iostream.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
void YS1(int a[],int i)
{
int* b=new int[8];
int j,x,y;
for(j=0;j<=7;j++)
{
b[j]=10*a[i+j]+a[i+j+1];
i++;
}
for(int c=0; c<7; c++)
{
x=(int)pow(2,c);
x=x&b[7];
if(x) y=(int)pow(2,7);
else y=0;
b[c]+=y;
if(b[c]>15) printf("%-4x",b[c]);
else printf("0%-3x",b[c]);
}
}
void YS2(int a[],int i,int n)
{
int* b=new int[n/2];
int j;
int c;
for(j=0; j<n/2; j++)
{
b[j]=10*a[i+j]+a[i+j+1];
i++;
}
for(c=0; c<n/2; c++)
{
if(b[c]>15) printf("%-4x",b[c]);
else printf("0%-3x",b[c]);
}
}
void main()
{
int flag;
int m;
int n;
int k;
int i;
char b[50];
scanf("%s",b);
flag=strlen(b)%2;
if(flag==0)
{
k=strlen(b);
}
else
{
k=strlen(b)+1;
}
int* a=new int[k];
if(flag==1) b[k-1]='0';
cout<<"压缩前的数据为:"<<endl;
for (i=0; i<=k-1; i++)
{
a[i]=b[i]-'0';
cout<<a[i]<<" ";
}
cout<<'\n';
m=k/16;
n=k%16;
cout << "压缩后的数据为:"<<endl;
for (i=0; i<=m-1; i++)
{
YS1(a,i*16);
}
if (n!=0)YS2(a,m*16,n);
cout << " "<<flag<<endl;
}