我使用了byteBuffer的getShort()方法来获得一个短值,我将其转换为一个int并打印出二进制值,它是一个16位数据,我需要从该16bit数据中访问起始4bit的int值。
short bitRateShort = buf.getShort(32 + 2);
int bitRateInteger = Short.toUnsignedInt(bitRateShort);
System.out.println(bitRateInteger);//46144
System.out.println(Integer.toBinaryString(bitRateInteger));// 1011010001000000
我需要获取起始4位的整数值,在我的情况下为1011,如何屏蔽这16位以获得4位半字节?
尝试一下:
int bitRateInteger = 46144;
System.out.println(Integer.toBinaryString(bitRateInteger&0xF000));
System.out.println(Integer.toBinaryString((bitRateInteger&0xF000)>>12));
输出:
1011000000000000
1011
[首先,我们用位掩码0xF000(二进制0b1111_0000_0000_0000)对起始4位进行掩码。然后,将结果位右移12位,以消除最后的“已知”零。
我同意Avi的回答。
这里是另一种方法:-
String first4char = Integer.toBinaryString(bitRateInteger).substring(0,4);
int intForFirst4Char = Integer.parseInt(first4char);
System.out.println(intForFirst4Char );