У меня путь в кодировке Unicode / UTF-16. разделитель путей - U + 005C '\'. Пути представляют собой корневые относительные пути файловой системы Windows с завершающим нулем, например "\ windows \ system32 \ drivers \ myDriver32.sys"
Я хочу преобразовать этот путь в 64-битное целое число без знака. Он не обязательно должен быть "криптографически надежным". Хэши должны быть нечувствительны к регистру, но способны обрабатывать буквы, отличные от ascii. Очевидно, что хеш тоже должен хорошо разлетаться.
У меня возникло несколько идей:
A) Использование идентификатора файла Windows в качестве «хеша». В моем случае я хочу, чтобы хеш изменялся при перемещении файла, так что это не вариант.
Б) Просто используйте обычный хеш-код: hash + = prime * hash + codepoint для всей строки.
У меня есть ощущение, что тот факт, что путь состоит из «сегментов» (имена папок и окончательное имя файла), можно использовать.
Подводя итог потребностям:
1) 64-битный хэш
2) хорошее распределение / небольшое количество конфликтов для путей файловой системы.
3) эффективный
4) не требует защиты
5) нечувствителен к регистру