将10位缓冲区映射到8位

Map 10Bit buffer to 8Bit

本文关键字:8位 映射 缓冲区 10位      更新时间:2023-10-16

我有一个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位)读取到临时缓冲区中。使用该数量是因为它对应于输入流上的整个字节数,也对应于输出流上的全部输出字节数。

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