Как использовать оставшиеся биты байта для хранения значения в нем? - PullRequest
0 голосов
/ 29 ноября 2018

Все мы знаем, что тип данных Integer может хранить значения до 4 байтов, значит 32 бита

, например, если у нас есть

int a = 2;

это означает a = 00000000 00000000 00000000 00000010

Есть ли способ использовать оставшиеся биты, хранить в них значения и извлекать их при необходимости?

Позвольте мне привести другой пример:

У нас естькомпьютерная система, которая использует только английские алфавиты и цифры (26 + 10), поэтому их сумма равна 36.

Как в случае, когда у нас есть 256 символов на компьютере и log_2(256) = 8 bits, и мы используем 8 бит длясохранить значения

log_2(36) = 6 бит, это означает, что для значений достаточно 6 бит.

Вот вопрос:

как я могу использовать только три байта дляхранить в нем 4 символа?

на основе log2(36) = 6

эта фотография может лучше показать идею

1 Ответ

0 голосов
/ 29 ноября 2018

Base64

Кодировка Base64 - это именно то, что вам нужно, и она имеет реализации Java.Из вики

Каждая цифра Base64 представляет ровно 6 бит данных.Таким образом, три 8-битных байта (т.е. всего 24 бита) могут быть представлены четырьмя 6-битными цифрами Base64.

Документы Java8 включают Base64 здесь .

Старый, неоправданно сложный ответ

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

Например, если вам нужно закодировать строчные буквы алфавита и цифры в виде шестибитовых кодов

Symbol  | Decimal | Binary
0       | 0       | 000000
1       | 1       | 000001
...
f       | 16      | 010000
...
o       | 25      | 011001
...
z       | 35      | 100011
...
EOF     | 63      | 111111

, тогда строку foof можно записать как 010000 011001 011001 010000.Большинство языков предпочитают представлять это как три байта, или 01000001 10010110 01010000.Это A搀 с использованием двоичной кодировки utf-8 или -63 22 -48, если вы представляете их как тип byte в Java.

Я не очень знаком с Java, но я знаю, что есть несколько ресурсов для C и других языков для считывания точных битовых значений для некоторого потока байтов.

...