QByteArray::QByteArray(const char *data, int size)
wird die Daten kopieren.
QByteArray::fromRawData(const char *data, int size)
werden die bereits vorhandenen Daten verwendet.
Je nach Implementierung kann das Kopieren der Daten zu Problemen führen.
Nachdem Sie die Daten in einem Byte-Array haben, gibt es mehrere Wege zu gehen, können Sie direkt einen Puffer aufbauen:
QBuffer(QByteArray *byteArray, QObject *parent = Q_NULLPTR)
oder wahrscheinlicher, da Sie Audio spielen, möchten Sie vielleicht die Wiederverwendung und der gleiche Puffer eine der folgenden Optionen verwenden, um es aufzufüllen:
setBuffer(QByteArray *byteArray)
setData(const QByteArray &data)
Schließlich gibt es auch void QBuffer::setData(const char *data, int size)
, für die Sie brauchen nicht einmal das Byte-Array Schritt überhaupt.
Schließlich, denken Sie daran, dass QBuffer
ein IO-Gerät ist - es muss geöffnet werden, damit es funktioniert. Ein schneller Test zeigt, dass es wie erwartet funktioniert:
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"
Was bedeutet "ich nicht erfolgreich"? Hast du einen Fehler oder etwas bekommen? – dtech
Ich benutze den QBuffer um Audio zu spielen und in jedem Fall bekomme ich nur Rauschen oder Stille. Wenn ich auf einen Char-Zeiger umsetze, erhalte ich irgendwo während des Prozesses einen Puffer-Unterlauf. – gro
Wissen Sie, was QByteArray :: fromRawData Puffer nicht in QByteArray kopiert hat? Mit dieser Methode verwendet QByteArray Ihren Zeiger. – Unick