分类: C/C++
2008-04-11 00:13:29
/*-------------------------------------------------------------------------
2007 我的北电一面编程题
现在已知一个ASCII字符用一个字节存储,但其最高位是无用的
现将一个80个字节的字符串 压缩存储 为70个字节,
解决方法:显而易见是移位,现找出规律,写出一个公式
b[0]=(a[0]<<1)+ ( a[1] & 0x40) >>6;
b[1]=(a[1]<<2)+ ( a[2] & 0x60 )>>5;
b[2]=(a[2]<<3) + ( a[3] & 0x70 ) >>4;
....
b[6]=(a[6]<<7) + ( a[7] & 0x7f) >>0;
----------------------------------------------------------------------------*/
/*
int main()
{
char a[9]="abcdefgh";
char b[8];
int i;
int bal[7]={0x40,0x60,0x70,0x78,0x7c,0x7e,0x7f};
for (i=0; i<7; i++)
{
b[i]=(a[i] <<(i+1) ) + ( ( a[i+1] & bal[i] )>>(6-i) );
}
b[7]=0;
return 0;
}
*/
int main()
{
char a[81]="abcdefgh\
abcdefgh\
abcdefgh\
abcdefgh\
abcdefgh\
abcdefgh\
abcdefgh\
abcdefgh\
abcdefgh\
abcdefgh";
char b[71];
int i;
int j;
int k=0;
int bal[7]={0x40,0x60,0x70,0x78,0x7c,0x7e,0x7f};
for (j=0; j<10; j++) //10次
{
for (i=0; i<7; i++) //一次转换8个字节
{
b[k++]=( a[8*j+i] <<(i+1) ) + ( ( a[8*j+i+1] & bal[i] )>>(6-i) );
}
}
b[k]=0;
return 0;
}