Сопоставить 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.