//字节和字的转换(思路)
void ByteToBit(bool *Out, const char *In, int bits)
{
for(int i=0; i<bits; ++i)
Out[i] = (In[i>>3]>>(i&7)) & 1;
}
//请高手讲讲思路
void ByteToBit(bool *Out, const char *In, int bits)
{
for(int i=0; i<bits; ++i)
Out[i] = (In[i>>3]>>(i&7)) & 1;
}
//请高手讲讲思路
解决方案 »
- RepositionBars调整dialog窗口布局的问题
- 求助:1000个数据点如何绘制在100个像素范围内????
- 如何查看进程中各DLL的地址空间
- 使用CInternetSession::Close()不能断开TCP链接,请问该怎么做才能断开呀??
- 关于使用CSocket进行图像数据传输的问题
- 如何CListCtrl显示瓦片式(Tile)视图
- 1个pixel和一个中文汉字(英文字母)长度的比例是多少?在1024×768模式下
- 在vc中怎样给一个project加Library
- MIDI问题
- 写一个BHO插件,当浏览器开启的时候,修改网页的内容,(例如,向网页中添加一句话:“TEST”),求帮忙!
- 怎样把Activex控件封装到DLL中?在DLL中捕获控件的事件?
- 在lpszBuf里面用destsubstr替换substr,怎么实现
其次,把所需的位右移到最低位并和1作与操作,就得到bool值。
其中,i&7相当于i%8
i >> 3 使得 bits 每加 8 才前进一个 In 的字符,之后的问题是判断这个字符的每一位
这样写也许你就清楚了for( int i = 0; i < bits; ++i)
{
char chr = In[ i / 8 ];
Out[i] = chr >> ( i & 7 ) & 1;
}
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