将10Bit缓冲区映射到8Bit

问题描述:

我有一个10比特的SDI流,当我收到它时,它将被存储到uint8_t *buffer并偏离当然,当我读它时,我得到与预期完全不同的值,除了第一个:将10Bit缓冲区映射到8Bit

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

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

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

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

+0

10位值为'001 05A',8位是'0 04 5A',你如何得到'A5 10'和'A5 80'? –

+0

*是否有一个函数可以用来正确映射它? (C++风格)*不是我所知道的。你可能必须自己写一个。这个问题是类似的:http://*.com/questions/11680248/reading-a-binary-file-bit-by-bit –

+0

是的抱歉,我从右到左读,因为第一个值是来自流是正确的,当然8Bit值将是4而不是8,我会纠正它,但问题不会改变,即使它是相反的方式我读错误的值,是否有一个函数来转换它? – mattobob

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

然后,您可以使用左,右移位(<<>>)和位掩码(&)提取5个输出字节,并把它们放在你的uint8_t缓冲区。