Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4611733
  • 博文数量: 385
  • 博客积分: 21208
  • 博客等级: 上将
  • 技术积分: 4393
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-30 13:40
文章分类

全部博文(385)

文章存档

2015年(1)

2014年(3)

2012年(16)

2011年(42)

2010年(1)

2009年(2)

2008年(34)

2007年(188)

2006年(110)

分类: C/C++

2006-10-29 16:50:58

文件:longChar2short.rar
大小:0KB
下载:下载
/*-------------------------------------------------------------------------

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

阅读(2688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~