我做一些逆向工程。有一个uint值,指示存储某些内容的插槽号。但是有不同类型的存储。当某些内容存储在其他存储中时,该值将应用0x01000000掩码。并且当它再存储在一个存储器中时,掩码为0x02000000。
我的函数收到此值,因此我需要确定存储空间和插槽。例如:
0x00000005-是存储器0中的第五个插槽
0x01000009-是存储器1中的插槽9
0x02000002-是存储2中的插槽2
最好的方法是什么?
我目前正在这样做:
uint test = 0x02000005;
bool bit_set_for_01 = (test & (1 << 24)) != 0;
bool bit_set_for_02 = (test & (1 << 25)) != 0;
但是我觉得这不是最好的事情。
您可以通过编写如下代码使其更具可读性,并稍微提高效率:
public static (int slot, int storage) Storage(int flags)
{
return ((flags >> 24) & 7, flags & 0xffff);
}
然后:
static void Main()
{
var item = Storage(0x00000005);
Console.WriteLine($"Storage: {item.storage}, slot: {item.slot}");
// Or just for demo:
Console.WriteLine(Storage(0x01000009));
Console.WriteLine(Storage(0x02000002));
}
请注意,我在7
上面,这给了您3位用于插槽存储(0..7插槽编号)。我也正在使用0xffff,它为插槽提供16位。
您应该调整这些值以反映两个数字所使用的位数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句