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_size
size引数を追加するのを忘れたのかもしれませんQByteArray::fromRawData
? その場合strlen(data)
、サイズの計算に使用されます。
そして、次のようなものを使用している場合:
QByteArray byteArray = QByteArray::fromRawData(static_cast<const char*>(data), data_size);
QBuffer buffer(&byteArray);
その後、byteArray
QBuffer が破棄されるまで有効である必要があります。また、QByteArray::fromRawData(...)
はコピーしないため、 が指すメモリdata
も有効なままでなければなりません。その要件を満たさないことも、失敗を説明します。