如何从 16 位数据中获取 4 位?

How do I get the 4bit from a 16 bit data?

我使用了byteBuffer的getShort()方法得到了一个short值,我把它转换成一个int并打印了二进制值,这是一个16位的数据,我需要访问起始4位的int值这16位数据。

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,以去除末尾的 "known" 零。

编辑: 正如@CarlosHeuberger 所指出的那样,您甚至不需要执行 & 操作,因为 >> 默认情况下会截断所有右侧位。所以,改为这样做:

int bitRateInteger = 46144;
System.out.println(Integer.toBinaryString(bitRateInteger>>12));

输出:

1011

我同意阿维的回答。

这是另一种方法:-

String first4char = Integer.toBinaryString(bitRateInteger).substring(0,4);
int intForFirst4Char = Integer.parseInt(first4char);

System.out.println(intForFirst4Char );