将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位)读取到临时缓冲区中。使用该数量是因为它对应于输入流上的整个字节数,也对应于输出流上的全部输出字节数。
然后使用左右移位(<<
和>>
)和逐位掩码(&
)提取5个输出字节,并将它们放入uint8_t缓冲区。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- 具有匿名结构的不同位映射
- 使用Solaris 64位或Linux 32位到Linux 64位的内存映射文件
- 可视化 为什么在 MSVC C++中"unsigned"映射到 32 位?
- C++将矩阵列映射到秩 - 位操作
- 高效实现 64 位和 32 位无符号整数之间的双向映射
- 您如何处理使用 36 位映射的 IO
- 使用以位集为键的映射时出现的问题
- 内存映射一个巨大的文件在32位软件运行在64位操作系统
- 将10位缓冲区映射到8位
- 从一个变量的位到另一个变量位的有效映射
- 如何在64位平台中将swig配置为将size_t映射为ulong而不是uint(c#)