2015-06-27 2 views
-1

У меня есть ограниченное хранилище, которое может хранить только 16 байтов в массиве байтов. Если у меня длинная строка, String.getBytes() не будет работать для меня.Преобразование строки Java в 16-байтовый массив байтов

Как сделать, чтобы преобразовать/закодировать длинную строку java в 7-битных стандартных символах ascii, установленных в 16-байтовый массив байтов, которые могут быть закодированы обратно в исходную строку? Тем не менее, я понимаю, что будет исходная строка ввода. Я также хочу посоветовать, как устанавливать требования с разумными ограничениями длины, то есть длиной адреса электронной почты.

+0

Имеет ли строка произвольное значение или имеется только ограниченное количество значений, которое может иметь? Сколько из этих строк будет? Является ли хранилище ограниченным ОЗУ или можно хранить строки где-нибудь, где отменяется ограничение на 16 байт? – yshavit

+0

Ограничение на самом деле устанавливается внешней lib, что является пределом для приема байтового массива в 16 фиксированных размерах массива. Мои строки ввода - это фактически адрес электронной почты в 7-разрядных наборах символов ascii для печати. Я не могу ограничить адрес электронной почты менее 16 символами, но я хотел бы знать разумный способ продлить допустимую длину электронной почты. – Sean

+1

Если это электронные адреса, легко создать настраиваемую кодировку, которая отображает все строчные буквы и большинство знаков пунктуации на 5-битные символы, а затем расширяет их, чтобы добавить поддержку цифр. Таким образом, вы можете разместить до 25 символов в 16 байт. Не уверен, что этого вам достаточно. Для меня это не так. Вы также можете провести некоторые эксперименты с кодированием адресов с использованием контекстного кодирования Хаффмана. Я сомневаюсь, что результаты будут большими. –

ответ

2

То, что вы просите, невозможно. Произвольная, достаточно длинная и сложная строка не может быть закодирована в 16 байтах.

Даже если строка использует только 7-битные стандартные символы ASCII, вы должны быть ограничены строками кодирования/декодирования с 18 символами ((8 бит на байт * 16 байт)/7 бит на символ). Фактическая арифметика смещения битов в этом случае была бы очень грязной, и полученная экономия памяти была бы незначительной.

+0

Начну с моего плохого quesiton. Очевидно, что это технически невозможно без разумного ограничения входной строки. Позвольте мне переработать мой вопрос. Благодарю. – Sean

Смежные вопросы