Для случая 4 4 битов у вас есть 16 ** 4 или 65536 случаев, это будет отображаться в 8 2 битных ячейках, так что это будет тривиальной проблемой. Однако, если вы переформулируете свою проблему как биективное отображение пространства всех строк, состоящих из 4 битов на 2 бита на байт, это будет другой проблемой, и да, у которой есть решение.
Простое решение - посмотреть на отображение бесконечного нечетного двоичного пространства строк каждого типа шаблона. У бесконечной нечетной строки есть последняя на конечном расстоянии от начала, что вы делаете, вы начинаете писать биты, когда они появляются, у вас есть один флаг, если он установлен, и вы сделали последний байт (2 или 4 бита, в зависимости от того, какое значение вы используете) вы пишете 1000 ... если флажок снят, вы пишете 000 ..., поскольку в расширении был один, который является последним "1".
преобразование 1000 0101 0111 0000 в прямую копию 100001010111000010000 ...
обратите внимание на хвост 100 .. так как флаг установлен. Если вы делаете обратное для 2-х бит, установите
флаг проходит через многие государства, но 1000 .. в конце части флага, так что в
Установив 2 бита, вы получите 10 00 01 01 01 11 00 00 нет ничего сложного 8 байт
но при конвертации 1000 0101 0111 0100 вы получите 1000010101110000 ...
при просмотре 2-битного набора вы получите 10 00 01 01 01 11 10
что на 2 бита меньше на 7 байт
для эта биекция из 4 битов, установленных в 2 бита, всегда будет либо
2n байтов для байта двух байтов или 2n-1 байтов, где n число 4-битных байтов.
Этот метод отображения на бесконечные нечетные файлы работает для биективного преобразования любой строки
член бесконечного набора любого количества байтов на байт, даже если число
биты, составляющие байт, меняются в зависимости от n.