这是用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; }