Мне было поручено задокументировать приложение, в котором нет комментариев. Однако мне не удалось понять следующую функцию.
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;
}
}
С моим текущим пониманием это сдвиг 5 вправо и добавляет некоторую ценность.
Также дополнительная информация:
encver
представляется зашифрованной версией как int (читается из файла)
realver
- это версия, которую мы тестируем на совпадение. Эта функция передается в другую функцию с short.MinValue
до short.MaxValue
Какова цель этого цикла? Как код достигает этой цели?