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

问题描述 投票:0回答:2

我使用了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位半字节?

java bit-manipulation byte bytecode bytebuffer
2个回答
0
投票

尝试一下:

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位,以消除最后的“已知”零。


0
投票

我同意Avi的回答。

这里是另一种方法:-

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

System.out.println(intForFirst4Char );
© www.soinside.com 2019 - 2024. All rights reserved.