获取一个字节byte的某位bit

我的梦境 提交于 2020-01-16 15:01:40

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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!