Ну, есть ряд проблем, которые вы, возможно, захотите решить.
Первое, что я заметил, это то, что вы проверяете наличие ошибок, печатаете сообщение об ошибке, а затем продолжаете обработку, как будто все в порядке.
Во-вторых, ваш алгоритм сжатия не алгоритм сжатия.Похоже, вы хотите, чтобы каждый несжатый символ стал двумя в сжатом виде.Даже если вы вместо этого хотите записать десятичное значение, как рекомендует Eli, вы не уменьшите пространство, необходимое для хранения символа.
Я предполагаю, что вам действительно нужно binary , не десятичное представление.Это позволит вам представлять каждый символ, используя два бита вместо полного байта.
Например, для четырех символов «A», «B», «C» и «D» одно возможное двоичное представление будет
CHAR BITS
A <=> 00
B <=> 01
C <=> 10
D <=> 11
Затем вы можете выбрать способ объединения этих значений в сжатую форму, например, последовательность из четырех символов ABAD может быть представлена как 00010011
или 11000100
.Просто убедитесь, что вы разделяете их в соответствии с тем, как вы их комбинируете.
Просто чтобы прояснить, 00010011
эквивалентен десятичному числу 19
.
Естьпосмотрите здесь для более подробной информации о том, как манипулировать битами.