read () будет считывать байты без какой-либо интерпретации (таким образом, «двоичный» режим).
Будучи двоичным, и вы хотите получить доступ к отдельным байтам, вы должны использовать буфер без знака char unsigned char buffer[BUFFER]
.Вы можете рассматривать char / unsigned char как байты, в linux они будут 8 битами.
Теперь, поскольку вы имеете дело с 8-битным ascii, сжатым до 7 бит, вам придется конвертироватьэти 7 бит в 8 бит снова, чтобы вы могли разобраться в данных.
Чтобы объяснить, что было сделано - рассмотрите текст Hey
. Это 3 байта.Байты будут иметь 8 битов каждый, и в ascii это битовые комбинации:
01001000 01100101 01111001
Теперь, удалив самый старший бит из этого, вы сдвигаете оставшиеся биты на один бит кслева.
X1001000 X1100101 X1111001
Выше Х - бит, который нужно удалить.Удаляя эти и сдвигая другие, вы в итоге получаете байты с таким шаблоном:
10010001 10010111 11001000
Самые правые 3 бита просто заполнены нулями.,Там еще 3 байта.Со строкой в 8 байт мы сохранили 1 байт, так как это сжимало бы до 7 байт.
Теперь вам нужно сделать обратное для байтов, которые вы прочитали обратно в