Если вы действительно хотите конвертировать его, тогда этот код сделает это
var
BinarySize: Integer;
InputString: string;
StringAsBytes: array of Byte;
begin
BinarySize := (Length(InputString) + 1) * SizeOf(Char);
SetLength(StringAsBytes, BinarySize);
Move(InputString[1], StringAsBytes[0], BinarySize);
Но, как уже говорилось, это не спасет вас. Количество использованного будет практически одинаковым. Вы ничего не получите от этого одного. Если вам нужно много строк, используйте другой подход. Как что-то из этого списка вариантов:
- Используйте словарь и сохраняйте каждую строку только один раз
- Содержит только часть всех строк в памяти. Какой-то кеш. Есть другие на жестком диске и использовать потоки, чтобы загрузить их
- Если у вас очень большая строка, подумайте об их сжатии.
- Если вы читаете из файла и нацелены на двоичные данные, пропустите строку посередине. Чтение источника непосредственно в байтовый буфер.
Трудно оказать дальнейшую помощь, не зная больше о проблеме.
EDIT
Если вам действительно нужен минимальный объем памяти и вы можете жить с немного меньшей скоростью (но все еще очень быстро), вы можете использовать Suffix Trie или B-Tree или событие a просто Двоичное дерево . Они могут работать непосредственно с жесткого диска и могут быть очень быстрыми для поиска. Если вы затем кешируете подмножество данных в ОЗУ, вы получаете оптимальное решение памяти в зависимости от скорости.
В любом случае, учитывая количество данных, которые, как вы утверждаете, они имеют, кажется, что оптимизация памяти вообще не нужна. 22 МБ ОЗУ вряд ли проблема и не стоит оптимизировать.