QByteArray* als Funktionsparameter
Verfasst: 10. September 2015 14:56
Hallo,
mein Problem: Ich übergebe die Referenz auf einen QByteArray an eine Funktion als Parameter. Darin soll es befüllt werden. Die Daten kommen von einem Aufruf der read-Funktionen der QSerialPort-Klasse. Auch wenn die Länge des QByteArray danach meiner Erwartung entspricht, kann ich mit den enthaltenen Daten nichts anfangen.
Hier ist der ursprüngliche Anlauf. Nach dem append der QByteArray-Klasse kann ich sowohl innerhalb der folgenden Funktion nichts mit den enthaltenen Daten anfangen, weil sie nur Murks sind, wenn ich sie mit einem QDatastream wie oben extrahiere, als auch an obiger Stelle des Aufrufs.
In der folgenden Variante kann ich immerhin innerhalb der Funktion mit den Daten etwas anfangen, extrahiere ich sie mit QDatastream, versuche ich es aber wie gehabt an der Stelle des Aufrufs, bleibt wieder nur Murks.
Ich denke mir, das muss doch gehen, aber wie?
Grüße,
leif
mein Problem: Ich übergebe die Referenz auf einen QByteArray an eine Funktion als Parameter. Darin soll es befüllt werden. Die Daten kommen von einem Aufruf der read-Funktionen der QSerialPort-Klasse. Auch wenn die Länge des QByteArray danach meiner Erwartung entspricht, kann ich mit den enthaltenen Daten nichts anfangen.
Code: Alles auswählen
Library *lib = new Library;
QSerialPort *port = new QSerialPort("COM1");
QByteArray answer;
int err = lib->readAnswer(port, &answer);
if(err < 0) return;
QDatastream out(&answer, QIODevice::ReadOnly);
int data;
out >> data;
Code: Alles auswählen
int Library::readAnswer(QSerialPort *port, QByteArray *answer)
{
int count = port->bytesAvailable();
if(count < 1) return -1;
char *temp = new char[count];
port->read(temp, count);
answer->append(temp, count);
delete [] temp;
return 0;
}
Code: Alles auswählen
int Library::readAnswer(QSerialPort *port, QByteArray *answer)
{
int count = port->bytesAvailable();
char *temp = new char[count];
port->read(temp, count);
QBuffer buffer(data_read);
buffer.open(QIODevice::ReadWrite);
QDataStream out(&buffer);
out.writeRawData(temp, count);
buffer.close();
delete [] temp;
return 0;
}
Grüße,
leif