请教bit和byte转换的问题
用C转换bit和byte的怎么做啊?
以下是我搜到的代码但是不知道什么意思,能不能给解释一下啊
unsigned char *bit2byte(unsigned char bit[8] , unsigned char byte[64])
{
int i=0 ;
for(i=0 ; i<=63 ; i++)
{
byte[i] = 0x0 ;//问题1:初始化为什么给字符类型赋值十六进制0?
}
for(i=0 ; i<=7 ; i++)
{//问题5:这样转换的原理能给说下吗?
if((bit[i] & 0x80) == 0x80) byte[i*8+0] = 0x01 ;//问题2:bit[i] & 0x80为什么要这样做,想得到什么?
if((bit[i] & 0x40) == 0x40) byte[i*8+1] = 0x01 ;//问题3:为什么要赋值十六进制01?
if((bit[i] & 0x20) == 0x20) byte[i*8+2] = 0x01 ;
//问题4:0x80 0x40 0x20 0x10 这8421是什么意思,貌似BCD码有8421的跟这个有关系吗?
if((bit[i] & 0x10) == 0x10) byte[i*8+3] = 0x01 ;
if((bit[i] & 0x08) == 0x08) byte[i*8+4] = 0x01 ;
if((bit[i] & 0x04) == 0x04) byte[i*8+5] = 0x01 ;
if((bit[i] & 0x02) == 0x02) byte[i*8+6] = 0x01 ;
if((bit[i] & 0x01) == 0x01) byte[i*8+7] = 0x01 ;
}
return byte;
}
//byte到bit是这样转的
unsigned char byte[64]
/*byte1*/
for(i = 0;i <= 7;i++)
{
if(byte[0] == 0x1) bit[0] = bit[0] | 0x80 ;//问题6:bit[0] | 0x80这样会得到什么,为什么这样做?
else bit[0] = bit[0] & 0x7f ;//问题7:bit[0] & 0x7f这样会得到什么,为什么这样做?
if(byte[1] == 0x1) bit[0] = bit[0] | 0x40 ;
else bit[0] = bit[0] & 0xbf ;
if(byte[2] == 0x1) bit[0] = bit[0] | 0x20 ;
else bit[0] = bit[0] & 0xdf ;
if(byte[3] == 0x1) bit[0] = bit[0] | 0x10 ;
else bit[0] = bit[0] & 0xef ;
if(byte[4] == 0x1) bit[0] = bit[0] | 0x08 ;
else bit[0] = bit[0] & 0xf7 ;
if(byte[5] == 0x1) bit[0] = bit[0] | 0x04 ;
else bit[0] = bit[0] & 0xfb ;
if(byte[6] == 0x1) bit[0] = bit[0] | 0x02 ;
else bit[0] = bit[0] & 0xfd ;
if(byte[7] == 0x1) bit[0] = bit[0] | 0x01 ;
else bit[0] = bit[0] & 0xfe ;
}