将 10 位缓冲区映射到 8 位

Map 10Bit buffer to 8Bit

我有一个 10 位 SDI 流,当我收到它时,它会存储到 uint8_t *buffer 中,当然当我读取它时,我得到的值与预期完全不同,除了第一个:

10 位 -> 00 0000 0001 | 00 0101 1010 → 十六进制:A5 10

8 位 -> 0000 | 0000 0100 | 0101 1010 → 十六进制:A5 40

有没有我可以用来正确映射它的函数? (C++ 风格)

如果不存在,我该如何实现?

基本上,您需要使用 fread() 和正确的参数才能将 5 个字节(即 40 位)准确地读入临时缓冲区。您使用该数量是因为它对应于输入流上的整数字节数以及输出流上的整数输出字节数。

然后您使用左右 SHIFT(<<>>)和按位掩码(&)提取 5 个输出字节并将它们放入您的 uint8_t缓冲区。