Сопоставить 10-битный буфер с 8-битным

У меня есть 10-битный поток SDI, когда я его получу, он будет сохранен в uint8_t *buffer и конечно, когда я читаю его, я получаю совершенно другое значение, чем ожидалось, за исключением первого:

10Bit -> 00 0000 0001 | 00 0101 1010 → Hex: A5 10

8 бит -> 0000 | 0000 0100 | 0101 1010 → Hex: A5 40

Есть ли функция, которую я могу использовать, чтобы отобразить ее правильно? (Стиль C++)

Если его не существует, как мне его реализовать?

1 ответ

Решение

В основном вам нужно использовать fread() с правильными параметрами для чтения ровно 5 байтов, то есть 40 бит, во временный буфер. Вы используете это количество, потому что оно соответствует целому числу байтов во входном потоке, а также целому числу выходных байтов в выходном потоке.

Затем вы используете левую и правую SHIFT (<< а также >>) и побитовые маски (&) чтобы извлечь 5 выходных байтов и поместить их в буфер uint8_t.

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