将两个值打包成一个int

时间:2014-11-16 01:49:54

标签: java bit-manipulation

我正在对一个协议进行逆向工程,需要一些数据传输方面的帮助。

在数据中,值x存储为单个字节。然后,使用下面的代码将此数据x转换为值aba的最大值为10,b的最大值为3.

以下是软件中用于从a推断bx的代码。我的问题是:如何xa生成b的值?

int x = data.get_byte();
int a = x >> 2;
int b = x & 3;

2 个答案:

答案 0 :(得分:3)

几乎与外推相反:

(a << 2) | b

答案 1 :(得分:2)

b表示在x的最后两位。 &amp; 3基本上清除除最后2个之外的所有位(因为3表示为000 .... 00011)

a由除x的最后两位之外的所有数据表示。 &gt;&gt; 2将所有位向右移动两位,删除先前存储在最后2位的所有位。

给定a和b,您可以通过基本上执行与(a << 2) | b

这两个操作相反的方式构造x