//字节和字的转换(思路)
void ByteToBit(bool *Out, const char *In, int bits)
{
    for(int i=0; i<bits; ++i)
        Out[i] = (In[i>>3]>>(i&7)) & 1;
}
//请高手讲讲思路

解决方案 »

  1.   

    对于第i位bit,先确定它在哪个字节上,比如第0位在第0个字节上,第8位在第1个字节上,这一步由In[i>>3]完成,相当于i/8;
    其次,把所需的位右移到最低位并和1作与操作,就得到bool值。
    其中,i&7相当于i%8
      

  2.   

    i >> 3 相当于 i / 8, bits 一定是 strlen( *In ) 的 8 倍,
    i >> 3 使得 bits 每加 8 才前进一个 In 的字符,之后的问题是判断这个字符的每一位
    这样写也许你就清楚了for( int i = 0; i < bits; ++i)
    {
      char chr = In[ i / 8 ];
      Out[i] = chr >> ( i & 7 ) & 1;
    }
      

  3.   

    i>>3相当于i/8的整数部分
    i&7即为i&0x0111,相当于i%8这里i代表的是bit的序号,
    i>>3得到了该bit对应在字节数组In中所处字节的序号
    i&7得到了该bit在该字节中的第几位
    于是In[i>>3] >> (i&7)就将该bit移到了字节的最后一个bit处,
    再&1就将该字节除最后一个bit外的其他bit全置为0,
    这样也就得到了结果需要的bit