gpt4 book ai didi

c++ - 将 uint8_t* 转换为 char* 以用于 QIODevice

转载 作者:行者123 更新时间:2023-12-01 15:07:26 25 4
gpt4 key购买 nike

我正在修改 Qt Audio Output example如下:

  • 我可以从第三方访问混音器 API。
  • 从这个混频器读取数据的方法是void AudioMixer::ReadData(uint8_t *stream, uint32_t len);
  • 在示例中,我更改为输出此数据的函数是 qint64 Generator::readData(char *data, qint64 len)

  • 如果我的理解是正确的,我应该可以操作 QIODevice通过覆盖 Generator::readData 在推送模式下调用 AudioMixer::ReadData 的方法方法并转换 uint8_t*AudioMixer 使用到 char*QIODevice 一起使用.

    我认为这是可能的吗?如果是这样,有人可以建议如何进行类型转换吗?如果没有,您能否解释一下如何输出 uint8_t*使用 QIODevice ?

    为了完整起见,方法是:
    void AudioMixer::ReadData(uint8_t *stream, uint32_t len)
    {
    if(buffer.GetMaximumReadSize() < len)
    {
    memset(stream, 0, len);
    }
    else
    {
    buffer.Read(stream, len);
    }
    }


    qint64 Generator::readData(char *data, qint64 len)
    {
    qint64 total = 0;
    while (len - total > 0) {
    const qint64 chunk = qMin((m_buffer.size() - m_pos), len - total);
    memcpy(data + total, m_buffer.constData() + m_pos, chunk);
    m_pos = (m_pos + chunk) % m_buffer.size();
    total += chunk;

    // Need to call AudioMixer::readData in here
    }
    return total;
    }

    最佳答案

    在 C++ 中没有原生类型来表示“字节”,只有 char保证只保存一个字节。表示原始二进制数据的字节类型是否应该签名存在不同意见,因此有些人使用unsigned char ( uint8_t ) 和其他人使用普通的 char .最后,这并不重要,因为您通常不对二进制数据执行算术运算,而只是读取和解释它。

    因此,您可以只使用类型转换在不同的二进制数据表示之间进行转换。由于这是 C++,你应该使用 reinterpret_cast (支持 C 风格的类型转换):

    char* dst = reinterpret_cast<char*>(/* your uint8_t* expression */);

    是否使用 reinterpret_cast或 C 风格的类型转换显然是有争议的。 C++ 的创造者 Bjarne Stroustrup 将 certainly advocate for reinterpret_cast ,但别人不喜欢,没关系。

    关于c++ - 将 uint8_t* 转换为 char* 以用于 QIODevice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298550/

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