解析32位标志需要帮助

时间:2014-05-13 10:03:19

标签: bit-manipulation reverse-engineering

我正在使用32位signed int,它应该包含24个项目的真/假标志,从id为1开始。所以我的第一个假设是每个位对应于其对应的项目ID。所以首先,我只是做了

(flag_int >> item_id) & 1

这很有效 - 主要是。例如,以125831406的标志int开头,预期结果(左)与实际结果(右)相比

1  true   true
2  true   true
3  true   true
4  false  false
5  true   true
6  true   true
7  true   true
8  false  false
9  false  false
10 false  false
11 false  true <<
.. ???    false
22 true  false <<
23 ???    true
24 true   true
25 true   true
26 true   true  

问题是,并非每个标志都以已知的差异结束,并且当它出现时,它并不总是在相同的ID上,并且差异的数量似乎总是在1和2之间变化。

所以这告诉我还有一些其他的价值。好消息是,我知道有两种可能性。首先,是条目id - 在示例中是307,第二个是另外的0/1标志,在示例中将是1.

坏消息是,当涉及到旗帜时,我在按位操作方面存在可怜的缺点,而我的尝试一切都是徒劳的。因此,虽然我当然不希望得到“正确”的答案,但是对于尝试什么的一些想法将是最受欢迎的。

1 个答案:

答案 0 :(得分:0)

这些旗帜的目的是确定角色的某些部分是否应该被他们佩戴的头饰类型隐藏起来。每个ID都标识了一个字符类型,每个项目都有两个标记ID - 每个性别一个。

为了避免任何额外的变量 - 我选择使用“耳朵”标志 - 因为与头发或其他部分不同,它应该是最容易发现的,并且具有额外复杂性的最低可能性。我的意思是,每个角色都有耳朵,只有一种耳朵 - 所以它应该是非常二元的。

差异 - 尽管我花了多少时间确保获得最准确的结果,却令人尴尬地容易解释 - 因为它与旗帜无关,而且与这些角色的特征有关。

每个性别的一个字符类型会忽略它们的标志,因为它们的耳朵是基础网格的一部分,并且无法隐藏。

两个性格类型 - 两个性别,似乎都无视他们的旗帜,只是因为他们的耳朵不被认为是耳朵,所以他们的显示将由不同的旗帜处理。

无论如何,这就是问题所在。如果我只是再看看那些角色类型的网格,我就会节省很多时间。