void * dataとから C++ Qt5.6 で QBuffer を作成する最もシンプルでエレガントな方法を探していますlong data_size。
void を char ポインターにキャストし、 をQByteArray::fromRawData()使用QDataStreamしてQByteArray. どちらの場合も、私は成功しませんでした。
void * dataとから C++ Qt5.6 で QBuffer を作成する最もシンプルでエレガントな方法を探していますlong data_size。
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)、バイト配列ステップがまったく必要ないものもあります。
最後に、これは IO デバイスであることを忘れないでQBufferください。動作させるには、開く必要があります。簡単なテストでは、期待どおりに動作することが示されています。
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"
data と data_size から QBuffer を作成するエレガントな方法を求めているので、単純にこれを使用します。
QBuffer buffer;
buffer.setData(static_cast<const char*>(data), data_size);
注: これにより、 が指すメモリがコピーdataされます。
なぜあなたが成功できないのか分かりません.as data_sizesize引数を追加するのを忘れたのかもしれませんQByteArray::fromRawData? その場合strlen(data)、サイズの計算に使用されます。
そして、次のようなものを使用している場合:
QByteArray byteArray = QByteArray::fromRawData(static_cast<const char*>(data), data_size);
QBuffer buffer(&byteArray);
その後、byteArrayQBuffer が破棄されるまで有効である必要があります。また、QByteArray::fromRawData(...)はコピーしないため、 が指すメモリdataも有効なままでなければなりません。その要件を満たさないことも、失敗を説明します。