1、获取高4位bit值
public int getHeight4(byte data){//获取高四位
int height;
height = ((data & 0xf0) >> 4);
return height;
}
2、获取低4位bit值
public int getLow4(byte data){//获取低四位
int low;
low = (data & 0x0f);
return low;
}
3、获取第i位的bit值
//b为传入的字节,i为第几位(范围0-7),如要获取bit0,则i=0
public int getBit(byte b,int i) {
int bit = (int) ((b >> i) & 0x1);
return bit;
}
4、获取从start开始长度为length的位bit值
/**
*
* @param b 一个字节:10011001
* @param start 起始bit位。如0位
* @param length 需要的bit的长度。如5个bit--------> 11001
* @return
*/
//b为传入的字节,start是起始位,length是长度,如要获取bit0-bit4的值,则start为0,length为5
public int getBits(byte b,int start,int length) {
//字节b有8位bit,右移start位,截取长度为5的bit
//10011001 右移 0位,还是10011001
//0xFF的二进制为 11111111(8个1),右移8-5的长度,变为:00011111
// 10011001
// & 00011111
// 00011001 --------> bit
int bit = (int)((b>>start)&(0xFF>>(8-length)));
return bit;
}
5、从一个字节byte按规则(在list中将8位的字节按不同bit切分)截取bit放入listBit。
/**
* 只适用于截取一个字节中的bit
* @param list 参数list指:如[2,6]是将8位的字节按2和6分成两部分。
* 或[2,2,2,2]是将8位的字节按2、2、2、2分成4部分。
* @param byteone 该低字节只是1个字节byte:10101010
* @return
*/
//得到从低字节取位的bit list
public List<Integer> getLowBit(List<Integer> list,byte byteone){
//定义一个list,存放从低字节取的bit
List listBit=new ArrayList();
//定义变量,作为低字节的第一个bit
int count=0;
//遍历对于该字节有截取方法的list,如[2,6]
for(int i=0;i<list.size();i++){
//对于一个字节byteone,通过从count开始获取长度为list.get(i)的位bit
//list.get(0) == 2,从0到长度为2的bit:(最后两个bit:10)
int value = getBits(byteone, count, list.get(i));
//将截取的2个bit加入listBit
listBit.add(value);
//原来低字节的第一个bit,再加上list.get(i)是 最新低字节第一个bit
//0 + 2 == 2,count == 2
count+=list.get(i);
}
return listBit;
}
6、高字节按规则获取bit
//得到从高字节取位的bit list
public List<Integer> getHighBit(List<Integer> list,byte byteone){
List<Integer> listBit=new ArrayList<Integer>();
//按高位
int count1=0;
for(int i=1;i<list.size();i++){
count1+=list.get(i);
}
for(int i=0;i<list.size();i++){
int value = getBits(byteone, count1, list.get(i));
listBit.add(value);
if(i<list.size()-1){
count1=count1-list.get(i+1);
}
}
return listBit;
}
来源:CSDN
作者:weixin_43231872
链接:https://blog.csdn.net/weixin_43231872/article/details/103998964