请教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 ;
}
以下是我搜到的代码但是不知道什么意思,能不能给解释一下啊
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 ;
}
...全文
相关推荐
Byte转Bit,Bit转Byte,Byte、Bit互转工具
其功能主要是将byte转换为对应的 8位 Bit 值显示,以及将 0-7 位的Bit 转换为 Byte。 这个纯属是比较对口的编程工具了,一般人估计用不上。。
BYTE类型之间相互转换
学习C++必经之路,入门级知识总结,笔记本知识概况,走一步再走一步
C SHARP设置和获取byte中bit的值(0或1).rar
C SHARP设置和获取byte中bit的值(0或1)
Java中的强制类型转换 大数转小数
里主要讨论一下大数转小数,比如int类型转short类型。小数转大数,如short 转 int不做讨论,需要的朋友可以参考下
C#中Byte[]和String之间转换的方法
很多朋友不清楚如何在Byte[]和String之间进行转换?下面小编给大家带来了byte与string转换的方法,感兴趣的朋友参考下吧


