[gelöst] QByteArray - Terminierungszeichen umgehen

Alles rund um die Programmierung mit Qt
Antworten
Richn
Beiträge: 5
Registriert: 14. Mai 2008 16:37

[gelöst] QByteArray - Terminierungszeichen umgehen

Beitrag von Richn »

Hallo zusammen.

Gibt es eine Möglichkeit Terminierungszeichen wie \0 in QByteArrays zu umgehen, denn bei mir tritt folgendes Problem auf:

Ich speichere ankommende Datenströme einer QExtSerial-Schnittstelle in eine QList<QByteArray>. Aus dieser Liste füge ich dann je nach Datenpaket (2-31 Byte) ein QByteArray zusammen, das ich dann wieder in eine QList<QByteArray> schreibe. Diese QByteArray-Einträge verarbeite ich später dann zu einem QString, den ich auf dem Bildschirm ausgebe.

Jetzt kommt mein Problem: Wenn nun ein Wert Null zum Beispiel als 3. Byte von 31 übertragen wird, schneidet er mir den Datenstrom an dieser Stelle ab und es werden anschließend nur noch Nuller ausgegeben, obwohl dort andere Werte vorhanden sind.

Kann ich diese Terminierung durch 0x00 irgendwie verhindern???

MFG + Danke für die Hilfe
Rich
Zuletzt geändert von Richn am 15. Mai 2008 09:41, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn '\0' drin vorkommt musst Du eben

Code: Alles auswählen

QByteArray::QByteArray ( const char * data, int size )
oder
QByteArray QByteArray::fromRawData ( const char * data, int size ) 
benutzen. Bei fromRawData muss man etwas aufpassen (siehe Doku)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Richn
Beiträge: 5
Registriert: 14. Mai 2008 16:37

Beitrag von Richn »

Also beginnt mein Problem quasi schon hier:

Code: Alles auswählen

QByteArray serialPort::getData()
{
	if(!isConnected())
	{
		emit connectionFailed();
		return QByteArray(tr("Not connected").toAscii());
	}
	QByteArray data = m_SerialPort->read(m_SerialPort->bytesAvailable());
	return data;
}
Wenn ich jetzt dieses QByteArray so wie du oben erwähnt hast abändere, kann ich dann im restlichen Programm normal weiterarbeiten oder muss ich das dann überall anwenden?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie überprüfst Du was in QByteArray drin ist ? Mit QByteArray::size()? Wenn die Größe nicht passt ist es ein Fehler in m_SerialPort.

Sobald die Daten im QByteArray sind ist es egal wie sie aussehen. Nur beim Einlesen kann das QByteArray ja nicht wissen wann es aufhöhren soll wenn man es ihm nicht sagt...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Richn
Beiträge: 5
Registriert: 14. Mai 2008 16:37

Beitrag von Richn »

Wenn zum Beispiel ein Datenpaket mit einer 0 an den Serialport gesendet wird, erhalte ich folgenden Sachverhalt in der oben genannten Funktion:

QByteArray -> size = 7
-> data = "("

Der Originaldatenstrom lauet: 28 00 00 63 59 63 81


Sind die Daten nun schon hier verloren oder werden sie durch das Terminierungszeichen nur nicht mehr angezeigt. Kann ich die nachfolgenden Daten dann über eine Schleife einzeln auslesen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich glaube da fehlen C-Grundlagen :(
Wenn das ByteArray eine Größe von 7 hat sind also 7 Bytes angekommen. Das ein printf oder mit was auch immer Du Dir einen String anzeigst beim ersten '\0' aufhört ist... naja irgendwie klar würde ich sagen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Richn
Beiträge: 5
Registriert: 14. Mai 2008 16:37

Beitrag von Richn »

Das ist mir schon klar, die Frage ist nur ob ich über eine Schleife trotzdem weiterlesen kann?.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Richn hat geschrieben:Das ist mir schon klar, die Frage ist nur ob ich über eine Schleife trotzdem weiterlesen kann?.
Was hat das eine mit dem anderen zu tun? Wenn 7 Bytes da sind - warum solltest Du sie nicht verarbeiten können??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Richn
Beiträge: 5
Registriert: 14. Mai 2008 16:37

Beitrag von Richn »

Danke für deine Hilfe. Habe mitlerweile das Problem gelöst. Lag an meiner Zeichenumwandlung in einen QString.
Antworten