我正在对一个协议进行逆向工程,需要一些数据传输方面的帮助。
在数据中,值x
存储为单个字节。然后,使用下面的代码将此数据x
转换为值a
和b
。 a
的最大值为10,b
的最大值为3.
以下是软件中用于从a
推断b
和x
的代码。我的问题是:如何x
和a
生成b
的值?
int x = data.get_byte();
int a = x >> 2;
int b = x & 3;
答案 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