【发布时间】:2013-12-16 22:00:50
【问题描述】:
s 我在使用此功能时遇到了一些问题。我设法将它从一些汇编代码中反转出来,并让它完美地工作。但我不能做与它相反的事情。这就是我的意思:
这是我的代码
ushort storedVal = 12525; //Value to extract actual index out of
byte[] block = BitConverter.GetBytes(storedVal);
uint aVal = block[0];
uint bVal = block[1];
uint index = Convert.ToUInt32((aVal >> 2) & 0x300) | bVal; //Extracting actual index
如您所见,它执行一个位移位(向右移动 2),对位移位的结果进行与运算,然后通过 bVal(或 12525 字节数组中的第二个字节)对结果进行或运算.
index 中存储的结果是表/列表的索引。在这种情况下,它是 48/
我无法将该索引恢复为这样的数字。基本上撤消该代码的作用。
【问题讨论】:
-
我认为这不可能。但我在等待有人证明我错了:)
-
如果范围(0..1023)小于域(0..uShort max),那么您肯定知道该函数不可逆,因为多个输入数字必须映射到相同的输出编号。
-
如果
storedVal的范围比int更窄会有所帮助。否则,正如上面其他人所指出的那样,这是不可能的。 -
@Bartos 我并不是想将 storeVal 作为一个 int,修复它。 (它不在我的实际代码中)
-
您总是以
storedVal开头吗?或者您有时会以index开头?如果您总是从storedVal 派生索引(就像我想象的那样),那么反过来只需引用storedVal。