120-битное преобразование данных Java в 32-битное - PullRequest
0 голосов
/ 06 ноября 2011

Можно ли как-нибудь преобразовать мои 120-битные данные в 32-битные, и после этого вернуть мои 120-битные данные из этих 32-битных?

Ответы [ 3 ]

2 голосов
/ 06 ноября 2011

Это называется сжатием без потерь, и вы обязательно должны прочитать об этом учебник .

С учетом сказанного, сжатие, которое вы можете выполнять с любым фрагментом данных, в значительной степени зависит отинформация в данных.Таким образом, вы можете уменьшить его до 32 бит, но нет никаких гарантий.

1 голос
/ 07 ноября 2011

Существует математическое доказательство того, что такое преобразование невозможно "всегда", оно называется принципом голубиной дыры.

http://en.wikipedia.org/wiki/Pigeonhole_principle

В принципе, если бы вы могли сжимать любая последовательность из 120 бит в 32 бита, вы можете рекурсивно сжимать всю сеть в 32 бита.

Теперь это не означает, что это никогда не возможно: вы, безусловно, можете сжать некоторые последовательности из 120 битв 32 бита при условии, что вы заранее знаете некоторые свойства последовательности для сжатия.

Например, IP-адреса могут быть частью списка, а не «любым» возможным значением.Индекс в списке будет стоить менее 32 бит.То же самое для номера порта, он может быть не полностью случайным, и вы можете уменьшить выбор в список предопределенных номеров.Если возможно только 4 порта, вам потребуется только 2 бита (вместо 16).

Для метки времени это намного сложнее.Это зависит от точности измерения.Одна возможность - использовать значение «delta» (как + N, добавленное к известному «base»).Количество битов, которое вы можете использовать для метки времени, зависит от того, сколько битов уже использовалось предыдущими полями.

Так что может быть возможным сжать его в 32 бита, но нетгарантия.Это во многом зависит от множества ситуаций, которые вы должны принять во внимание.

0 голосов
/ 07 ноября 2011

Невозможно сжимать каждые 120-битные данные в 32-битные данные и распаковывать обратно до оригинала. Однако вы можете сжать только некоторых без потерь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...