Спасибо за ответы до сих пор. Я просто хотел обновить людей с решением, с которым я иду. Я выбрал подход, который отличается от того, который я предусмотрел в своем вопросе.
Напомним, что я хотел сохранить представления строк таким образом, чтобы при извлечении в двоичном порядке все, что я сохранял для «8 миль», было отсортировано до того, что я сохранил для «101 далмаций».
Для каждого числа в строке, которое, по сути, является последовательностью цифр, я вставляю перед ними цифру, которая описывает количество цифр в номере.
Итак, «8» становится «18», а «101» становится «3101». Это добавляет некоторую избыточность к числу, поскольку вы используете больше цифр, чем вам нужно, и некоторые значения не будут существовать, но теперь у них есть свойство, что двоичная сортировка будет сортировать числа в числовом порядке. «101» предварительно отсортировалось бы до «8», что было нежелательно. После добавления этой дополнительной цифры «18» сортируется перед «3101».
Примечание: если номер длиной 9 или более цифр, я добавляю две цифры к началу: количество цифр в числе минус 9, затем 9, затем номер. Это позволяет использовать цифры до 18 цифр, что достаточно для меня.
Я также нормализую строку и другими способами - все в нижнем регистре, символы Юникода будут переведены в ближайший эквивалент ascii, а 'a', 'an' и 'the' будут удалены, если они первое слово.
Я отказался от превращения строки в одно большое числовое значение; это все еще строка, просто она не предназначена для чтения людьми.