Здравствуйте, уважаемые форумчане.
Есть описание функции GetHashCode32 на C#, которая считает - как не трудно догадаться - хэш от строки (она, вроде бы, даже встроенная). Необходимо её переделать на C++ / QT.
public static unsafe int GetHashCode32(string input)
{
fixed (char* str = input.ToCharArray())
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*)chPtr;
for (int i = input.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
}
Я понимаю, что в C# используется 2 байта на символ (UTF?). Пытался адаптировать функцию на QT / QString при помощи метода toStdWString().c_str(); Пытался так же и через QString(string.toUtf8).toStdWString().c_str()[index].
Но результат отличается от тех значений, что должны быть (мне известно очень маленькое количество константных значений уже рассчитанных давным давно, но нужно будет использовать новые значения и в будущем).
От строки "CS.Environment.Protocol.Messages.LogonMessage.Answer" (без кавычек) хэш должен быть 784129781
Никак не могу понять, как трансформировать этот алгоритм на QT / C++ / QString