Поскольку ваши данные ограничены, вы можете использовать это для управления хэшированием.
Предполагая, что строка имеет нулевое окончание ASCII, вы можете начать с преобразования в небольшое целое число.
char *charset = "abcdefghijklm"
"nopqrstuvwxyz.";
int c = strchr(charset, *s++) - charset;
Затем обработайте каждое значение как основание-27. Расшифруйте, умножив сумму на 27, прежде чем добавить в 0-26 «единицу» из текущего символа. Вы упоминаете максимальную длину. Я предполагаю, что это означает, что строки хранятся в массивах фиксированной длины. Если это так, то массивы не просто обнуляются, но и дополняются нулями. затем вы можете декодировать массивы назад, чтобы поместить существенные различия в наименее значимые «позиции» числа base-27. Но если размер - просто щедрое завышение, и ожидается, что большинство строк будет намного короче, то, вероятно, лучше сканировать вперед и завершать на nul.
int sum;
sum *= 27;
sum += c;