获取一个byte指定开始下标到结束下标的值,并转化为十进制
一个byte有8个bit,如何将一个byte指定一段bit转换为常用的数值呢?
首先需要明白,byte保存到bit实际是什么,简单讲,byte就是一个0和1组成的二进制数
如:0x01 => 0000 0001
0x02 => 0000 0010
我们可以先将byte的每一个元素取出,然后截取指定一段元素,再将这段元素转换为常用值
Byte a = (Byte)0x01;
String bit0 = String.valueOf((b >> 7) & 0x1);//第一位
String bit1 = String.valueOf((b >> 6) & 0x1);//第二位
String bit2 = String.valueOf((b >> 6) & 0x1);//第三位
String bit3 = String.valueOf((b >> 4) & 0x1);//第四位
String bit4 = String.valueOf((b >> 3) & 0x1);//第五位
String bit5 = String.valueOf((b >> 2) & 0x1);//第六位
String bit6 = String.valueOf((b >> 1) & 0x1);//第七位
String bit7 = String.valueOf((b >> 0) & 0x1);//第八位
System.out.println(bit0+bit1+bit2+bit3+bit4+bit5+bit6+bit7);
//输出结果为: 00000001
//加入我们想取 第一位到第四位的bit,转为常用十进制值
int result = Integer.parseInt(bit0+bit1+bit2+bit3,2);
System.out.println(result );
//输出结果为 0
最后整理得到如下方法,输入byte以及指定起始下标,返回常用的十进制值
public static Integer getLowConactHighEndForByte(byte b,int start,int end){
String bitStr = "";
for(int i=start;i<=end;i++){
bitStr += String.valueOf((b >> (7-i)) & 0x1);
}
return Integer.parseInt(bitStr,2);
}