gpt4 book ai didi

c++ - 来自 void 指针和内存大小的 QBuffer

转载 作者:太空宇宙 更新时间:2023-11-04 16:05:36 27 4
gpt4 key购买 nike

我正在寻找在 C++ Qt5.6 中从 void * datalong data_size 创建 QBuffer 的最简单和优雅的方法。

我尝试将 void 转换为 char 指针并使用 QByteArray::fromRawData() 以及使用 QDataStream 填充 QByteArray。在这两种情况下,我都没有成功。

最佳答案

QByteArray::QByteArray(const char *data, int size) 将复制数据。

QByteArray::fromRawData(const char *data, int size) 将使用已经存在的数据。

根据您的实现,不复制数据可能最终会出现问题。

有了字节数组中的数据后,有几种方法,可以直接构造缓冲区:

QBuffer(QByteArray *byteArray, QObject *parent = Q_NULLPTR)

或者更可能的是,由于您正在播放音频,您可能想要重复使用相同的缓冲区并使用以下方法之一重新填充它:

setBuffer(QByteArray *byteArray)
setData(const QByteArray &data)

最后,还有 void QBuffer::setData(const char *data, int size),您甚至根本不需要字节数组步骤。

最后,请记住 QBuffer 是一个 IO 设备 - 它需要打开才能工作。快速测试表明它按预期工作:

char data[] = {1, 2, 3};
void * vdata = data;
QBuffer buffer;
buffer.setData((char *)vdata, sizeof(data));
buffer.open(QIODevice::ReadOnly);
qDebug() << buffer.readAll(); // outputs "\x01\x02\x03"

关于c++ - 来自 void 指针和内存大小的 QBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36284233/

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