Ищу хороший 64-битный хеш для путей к файлам в UTF16

У меня путь в кодировке Unicode / UTF-16 . разделитель путей - U + 005C '\'. Пути представляют собой корневые относительные пути файловой системы Windows с завершающим нулем, например "\ windows \ system32 \ drivers \ myDriver32.sys"

. Я хочу преобразовать этот путь в 64-битное целое число без знака . Не требуется, чтобы был «криптографически надежным» . Хэши должны быть нечувствительны к регистру , но способны обрабатывать буквы, отличные от ascii. Очевидно, что хеш тоже должен хорошо разлетаться.

У меня возникло несколько идей:

A) Использование идентификатора файла Windows в качестве «хеша». В моем случае я действительно хочу, чтобы хеш изменялся при перемещении файла, поэтому это не вариант.

B) Просто используйте обычный sting hash: hash + = prime * hash + codepoint для всей строки.

У меня есть ощущение, что тот факт, что путь состоит из «сегментов» (имена папок и последний имя файла) можно использовать.

Подводя итог потребностям:

1) 64-битный хэш
2) хорошее распределение / небольшое количество конфликтов для путей файловой системы.
3) эффективный
4) не требует защиты
5) без учета регистра

7
задан hippietrail 2 April 2011 в 00:09
поделиться