我使用了byteBuffer的getShort()方法为我提供了一个短值,我将其转换为一个int并打印了二进制值,它是一个16位数据,我需要从该16位数据中访问起始4位的int值。
short bitRateShort = buf.getShort(32 + 2);
int bitRateInteger = Short.toUnsignedInt(bitRateShort);
System.out.println(bitRateInteger);//46144
System.out.println(Integer.toBinaryString(bitRateInteger));// 1011010001000000
我需要获取起始4bit的整数值(在我的情况下为1011),如何屏蔽这16位以获得4bit半字节?
最佳答案
尝试这个:
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位,以消除最后的“已知”零。
编辑:
正如@CarlosHeuberger所指出的那样,您甚至不需要执行
&
操作,因为>>
默认情况下会截断所有右侧位。因此,改为这样做:int bitRateInteger = 46144;
System.out.println(Integer.toBinaryString(bitRateInteger>>12));
输出:
1011