gpt4 book ai didi

c++ - 解包位大小不能被 8 整除的值流

转载 作者:太空狗 更新时间:2023-10-29 23:11:22 25 4
gpt4 key购买 nike

我在这上面花了太多时间,在这一点上我想我需要专家的帮助。

我有一个 const uint8_t* buffer ,一个整数数据类型(比如 uint16_t ),我知道 buffer包含包装 sample m每个位 m不能被 8 整除(例如,m=12 位)。知道buffer持有 N sample ,我需要返回一个 std::vector<uint16_t>包含这些 N 的值示例扩展到 uint16_t .

因此,buffer 的每三个字节(24 位)包含我需要处理的两个 12 位样本。我想实现一个泛化的功能

template <typename OutputType, int BitsPerSample>
std::vector<OutputType> unpack(const uint8_t* data, const size_t numSamplesToUnpack);

假设数据是大端和OutputType是一些整数类型,可以保存样本值而不截断它。

我了解位操作。我原则上理解如何实现。但是我不明白如何优雅简洁地实现它。有什么想法吗?

另外,这个问题有专门的名称或术语吗?

最佳答案

也许您可以尝试一次读取单个位,并记录您已处理了多少位。当您消耗 8 位时,您可以增加缓冲区指针。

这并不意味着您已经完成对该样本的解包,因此您还需要保留一个“bits_left”计数器,以防您需要在完成样本解包之前移动缓冲区指针。

关于c++ - 解包位大小不能被 8 整除的值流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50708591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com