|
Особенности Hash()
|
|||
---|---|---|---|
#18+
Доброго времени суток. Понадобилось повторить на Delphi функцию hash() из FB. Поиск по форуму выдал это 14398246 . В интернете нашел такую реализацию для HashELF64: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
если строка на входе до 20 символов, то все нормально, но после 20 результат hash() FB3.0 и Delphi отличаются. Так например hash строки "12345678901234567890": Код: pascal 1. 2.
Если изменить код так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
то для строки "12345678901234567890" hash становится одинаковым. Но это не решает проблему. Для более длинных строк hash разный. Я понимаю, что дело в переполнении Int64, но как подправить не догоняю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2019, 00:06 |
|
Особенности Hash()
|
|||
---|---|---|---|
#18+
SHS_SHSЯ понимаю, что дело в переполнении Int64 Нет, дело в том, что в Дельфи shr это логический сдвиг, а не арифметический. Знак не расширяется в отличии от Си. А арифметического у неё нет. Используй деление. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2019, 01:30 |
|
Особенности Hash()
|
|||
---|---|---|---|
#18+
Спасибо. Сейчас работает. Может кому пригодится: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2019, 09:31 |
|
Особенности Hash()
|
|||
---|---|---|---|
#18+
Кому надо, функция на TypeScript для Node или браузера: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Работает только с первыми 128 символами ASCII и та же проблема с переполнением, которую на не смог победить. Но, так как у меня строки до 14 символов, от которых вычисляется, то меня устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 18:56 |
|
|
start [/forum/topic.php?fid=40&fpage=14&tid=1560332]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 252ms |
total: | 414ms |
0 / 0 |