Хеш-функция чаще всего (но не обязательно всегда) выводит целое число в требуемом диапазоне (часто это параметр хеш-функции). Это целое число может быть использовано в качестве индекса. Обратите внимание, что хеш-функция не может гарантировать, что всегда будет давать уникальный результат, когда передаются разные данные в хэш. Это называется коллизией хэшей, и алгоритм хэширования всегда должен каким-то образом ее обрабатывать.
Что касается вашего конкретного вопроса, как строка становится числом. Любая строка состоит из символов (J, o, h, n ...), и символы можно интерпретировать как числа (в компьютерах). Стандарты ASCII и UTF связывают определенные значения с определенными символами, поэтому результат является детерминированным и всегда одинаковым на всех компьютерах. Таким образом, хэш-функция выполняет операции с этими символами, обрабатывая их как числа и получая другое число (вывод). Например, вы можете просто суммировать все значения и использовать операцию по модулю для ограничения диапазона результирующего значения.
Это было бы довольно ужасной функцией хеширования, потому что, например, "ab" и "ba" получили бы одинаковый результат. Разработка хеш-функции сложна, и поэтому следует использовать какой-то готовый алгоритм, если ситуация не требует другого решения.