我使用了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

09-26 15:25