.net - 为什么使用十六进制作为数组索引

标签 .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;
}

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

最佳答案

无论整数文字最初是以十六进制还是十进制(或者说,三元,假设编程语言支持它)在源代码中编写的,都不会写入 IL。你看到的是反编译器的猜测。

事实上,您可以通过设置以十进制形式查看所有这些文字:

View -> Options -> Disassembler -> Number Format : Decimal

关于.net - 为什么使用十六进制作为数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877656/

相关文章:

.net - 在多线程分布式应用程序中提高性能消耗内存

c# - 如何测试给定的功能代码单元 (C#) 是否不创建/写入任何文件到磁盘?

haskell - 从自声明数据类型的值列表中选取一个随机值

random - 跨平台跨语言跨一切实际确定性随机数生成器

c++ - 根据另一个对象和概率随机选择一个对象?

c# - .NET MySQL 数据读取器选择功能?

c# - 从快速启动中删除所有链接?

c# - Linq to Sql 查询两次返回相同的记录

javascript - 我需要在 Meteor 中生成一个随机数

java - Java中整数值的随机 "splitting up"