Название: GetHashCode32 на C [ решено ] Отправлено: joffadark от Январь 12, 2015, 21:52 Здравствуйте, уважаемые форумчане.
Есть описание функции GetHashCode32 на C#, которая считает - как не трудно догадаться - хэш от строки (она, вроде бы, даже встроенная). Необходимо её переделать на C++ / QT. Код: public static unsafe int GetHashCode32(string input) Я понимаю, что в 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 Название: Re: GetHashCode32 на C Отправлено: kambala от Январь 12, 2015, 23:11 у меня стабильно выдает -297025856 (3997941440 если возвращать уинт)...
https://gist.github.com/gerriten/7542231 этот код более понятный. Код
Название: Re: GetHashCode32 на C Отправлено: joffadark от Январь 13, 2015, 12:55 Всё оказалось проще, чем кажется. Оказывается, при формировании данных хэшей константных, использовалась строка C# в кодировке UTF-16.
Всё, что нужно было сделать - конвертировать в UTF-16 QString. Вот код: Код
|