2011-11-06 2 views
0

Есть ли способ конвертировать мои 120 бит данных в 32 бита, и после получения моих 120-битных данных из этих 32 бит?Преобразование данных на основе Java 120 бит в 32 бита

+1

Если ваша цель - сохранить одну и ту же информацию от 120 до 32, это невозможно. Не могли бы вы предоставить больше информации о своей проблеме? – migu

+1

Он называется [сжатие] (http://en.wikipedia.org/wiki/Data_compression), и это зависит от повторений ваших данных, сколько вы можете сжать его. – nfechner

+0

На самом деле у меня есть два ips (по 32 бит каждый), два номера портов (по 16 бит каждый) и временная метка (24 бит), которые суммируются до 120 бит, и я хотел, чтобы это было представлено в 32 битах. – blackhole

ответ

2

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

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

+0

На самом деле у меня есть два ips (по 32 бит каждый), два номера портов (по 16 бит каждый) и временная метка (24 бит), которые суммируют до 120 бит, и я хотел, чтобы она представлялась в 32 битах – blackhole

0

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

1

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

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

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

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

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

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

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

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