为什么使用hex作为数组索引

时间:2011-02-02 17:26:05

标签: .net random

我最近使用.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;
}

为什么作者使用十六进制而不是十进制?

1 个答案:

答案 0 :(得分:6)

整数文字最初是用源代码编写为十六进制还是十进制(或者说,三进制,假设编程语言支持它)不会写入IL。您所看到的是反编译器发出的 guess

事实上,您可以通过设置:

来查看所有这些十进制文字
View -> Options -> Disassembler -> Number Format : Decimal