我最近使用.net反射器来查看一些DLL文件,我注意到其中一个使用十六进制而不是十进制数组索引。
public Random(int Seed)
{
this.SeedArray = new int[0x38];
int num2 = 0x9a4ec86 - Math.Abs(Seed);
this.SeedArray[0x37] = num2;
int num3 = 1;
for (int i = 1; i < 0x37; i++)
{
int index = (0x15 * i) % 0x37;
this.SeedArray[index] = num3;
num3 = num2 - num3;
if (num3 < 0)
{
num3 += 0x7fffffff;
}
num2 = this.SeedArray[index];
}
for (int j = 1; j < 5; j++)
{
for (int k = 1; k < 0x38; k++)
{
this.SeedArray[k] -= this.SeedArray[1 + ((k + 30) % 0x37)];
if (this.SeedArray[k] < 0)
{
this.SeedArray[k] += 0x7fffffff;
}
}
}
this.inext = 0;
this.inextp = 0x15;
Seed = 1;
}
为什么作者使用十六进制而不是十进制?
答案 0 :(得分:6)
整数文字最初是用源代码编写为十六进制还是十进制(或者说,三进制,假设编程语言支持它)不会写入IL。您所看到的是反编译器发出的 guess 。
事实上,您可以通过设置:
来查看所有这些十进制文字View -> Options -> Disassembler -> Number Format : Decimal