Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 请帮我解释这个函数_C#_C# 4.0_Documentation - Fatal编程技术网

C# 请帮我解释这个函数

C# 请帮我解释这个函数,c#,c#-4.0,documentation,C#,C# 4.0,Documentation,我的任务是记录一个没有注释的应用程序。但是,我一直无法理解以下函数 private uint GetVersionHash(int encver, int realver) { int EncryptedVersionNumber = encver; int VersionNumber = realver; int VersionHash = 0; int DecryptedVersionNumber = 0; string VersionNumberSt

我的任务是记录一个没有注释的应用程序。但是,我一直无法理解以下函数

private uint GetVersionHash(int encver, int realver)
{
    int EncryptedVersionNumber = encver;
    int VersionNumber = realver;
    int VersionHash = 0;
    int DecryptedVersionNumber = 0;
    string VersionNumberStr;
    int a = 0, b = 0, c = 0, d = 0, l = 0;

    VersionNumberStr = VersionNumber.ToString();

    l = VersionNumberStr.Length;

    // I am specifically struggling with the purpose and intent of this loop.

    for (int i = 0; i < l; i++)
    {
        VersionHash = (32 * VersionHash) + (int)VersionNumberStr[i] + ;
    }

    a = (VersionHash >> 24) & 0xFF;
    b = (VersionHash >> 16) & 0xFF;
    c = (VersionHash >> 8) & 0xFF;
    d = VersionHash & 0xFF;
    DecryptedVersionNumber = (0xff ^ a ^ b ^ c ^ d);

    if (EncryptedVersionNumber == DecryptedVersionNumber)
    {
        return Convert.ToUInt32(VersionHash);
    }
    else
    {
        return 0;
    }
}
private uint GetVersionHash(int-encver,int-realver)
{
int EncryptedVersionNumber=encver;
int VersionNumber=realver;
int VersionHash=0;
int DecryptedVersionNumber=0;
字符串VersionNumberStr;
INTA=0,b=0,c=0,d=0,l=0;
VersionNumberStr=VersionNumber.ToString();
l=版本号TR.长度;
//我正在为这个循环的目的和意图而奋斗。
对于(int i=0;i>24)&0xFF;
b=(VersionHash>>16)&0xFF;
c=(VersionHash>>8)&0xFF;
d=VersionHash&0xFF;
DecryptedVersionNumber=(0xff^a^b^c^d);
if(EncryptedVersionNumber==DecryptedVersionNumber)
{
返回Convert.ToUInt32(VersionHash);
}
其他的
{
返回0;
}
}
根据我目前的理解,它正确地改变了5位,增加了一些价值

还有一些进一步的信息:

  • encver
    似乎是一个加密版本,为int(从文件中读取)
  • realver
    似乎是我们正在测试的匹配版本。它在另一个函数中循环到此函数,从
    short.MinValue
    short.MaxValue

这个循环的目的是什么?代码是如何实现这一目的的?

循环正在计算表示实际版本号的字符串中字符(数字)的“哈希”。VersionHash的值是一个数字,它取决于字符串中的每个字符、字符串长度及其顺序。

循环正在计算字符串中代表实际版本号的字符(数字)的“哈希”。VersionHash的值是一个数字,它取决于字符串中的每个字符、字符串的长度以及它们的顺序。

在我看来,for循环似乎只是自定义哈希函数的一部分,与生成方法param int encver的函数相同,由于该方法的本质是测试encver中的哈希是否与realver的重新哈希匹配-可能是为了某种完整性检查。

在我看来,for循环只是自定义哈希函数的一部分-与生成方法参数int encver的函数相同,因为该方法的本质是测试encver中的散列是否与realver的重新散列相匹配——可能是为了某种完整性检查。

我不太担心这个例程中的逻辑。这是一个典型的自行开发的加密系统,用于返回版本号的“哈希”。我会在一条注释中概括这个例程,指出函数的作用,而不涉及太多细节

for循环通过获取字符串中某个字符的(int)值,然后将其左移4个字节来生成哈希。因此,假设版本号的(int)值为:

1,2,3

for循环将生成以下版本的VersionHash:


000200030004

我不会太担心这个例程中的逻辑。这是一个典型的自行开发的加密系统,用于返回版本号的“哈希”。我会在一条注释中概括这个例程,指出函数的作用,而不涉及太多细节

for循环通过获取字符串中某个字符的(int)值,然后将其左移4个字节来生成哈希。因此,假设版本号的(int)值为:

1,2,3

for循环将生成以下版本的VersionHash:


000200030004

这似乎是某种许可证制度。你确定你只想添加评论吗?这似乎是某种许可方案。您确定只想添加评论吗?谢谢您的回答。我也想接受你的答案,但网站只允许我选择一个(谢谢你的回答。我也想接受你的回答,但是网站只允许我选择一个。:(谢谢你的回答。我也想接受你的回答,但是网站只允许我选择一个。:(谢谢你的回答。我也想接受你的回答,但是网站只允许我选择一个。:)(