博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

zxg623

只为伊人守侯 和我共同营造苍凉的远方 醉解千愁,他处不堪留 我冷因为我看到世界的冷漠,我傲因为孤独的灵魂漂泊于芸芸众生之上,我酷因为没被事故磨去棱角,我狂因为愿意用生命去追求理想,我痴因为还相信爱情的魔力 我的笑隐约透露着孤独,快乐背后深深藏着痛楚,坚强的面对然后偷偷的哭.......
  zxg623.cublog.cn

关于作者
姓名:zxg623
职业:嵌入式
年龄:25
位置:中国·深圳
个性介绍:
|| << >> ||
我的分类


北电 一面 算法题

/*-------------------------------------------------------------------------

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;
  
}

发表于: 2008-04-11,修改于: 2008-06-29 17:42,已浏览114次,有评论0条 推荐 投诉


网友评论
 发表评论