Хранение строки в виде двоичной строки из "unsigned char's to" в вопросах сжатия

Мне нужно хранить строку из 8 символов (все они цифры) в сжатом методе,

Насколько я понимаю, каждый char использования 8 bits которые 1 byte и так как я использую только цифры, я могу использовать 4 bits (2^4=16 комбинации) так что для каждого unsigned char Я могу хранить две цифры вместо одной. Таким образом мне нужно 4 bytes хранить 8 цифр вместо 8 bytes,

До этого я прав или нет?

Теперь, как я храню эти данные в строке 4 unsigned chars? Я не ищу откровенный ответ, просто начинаю понимать мотивацию.

2 ответа

Решение

Существует три очевидных способа хранения восьми десятичных цифр в четырех восьмибитных значениях.

Одним из них является уменьшение каждой десятичной цифры до четырех битов и сохранение двух четырехбитных значений в восьми битах.

Другой способ - объединить каждую пару десятичных цифр в число от 0 до 99 и сохранить это число в восьми битах.

Другой способ - объединить все восемь десятичных цифр, чтобы получить число от 0 до 99999999, и сохранить его в 32 битах, обрабатывая четыре восьмибитных значения как одно 32-битное целое число.

Чтобы выбрать между ними, подумайте, какие операции необходимо выполнить для кодирования значения (какие арифметические или битовые операции необходимы для объединения двух цифр для получения кодированного значения) и какие операции необходимо выполнить для декодирования значения (с учетом восьми битов, как вы получаете цифры из них?).

Чтобы оценить эту проблему, вы должны знать об основных арифметических операциях и битовых операциях, таких как побитовое И и ИЛИ, сдвиг битов, использование "масок" с операциями И и так далее. Это может также помочь узнать, что деление и остаток обычно являются более трудоемкими операциями, чем другие арифметические и битовые операции на современных компьютерах.

Я предпочитаю использовать unsigned int как предложил Гарольд в комментариях. В unsigned char[4] вам может потребоваться дополнительный один символ для прекращения '\0' персонаж.

Используйте переход, как вы сами предложили, для правильного преобразования из uchar в uint.

Другие вопросы по тегам