请教bit和byte转换的问题

yiyamzen yiyamzen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用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 ;
}
...全文
评论 13
收藏 已收藏
分享
返回顶部
yiyamzen
C语言 70,039 成员 243,237 内容