[gelöst] QByteArray - Terminierungszeichen umgehen
[gelöst] QByteArray - Terminierungszeichen umgehen
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
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:
Wenn '\0' drin vorkommt musst Du eben
benutzen. Bei fromRawData muss man etwas aufpassen (siehe Doku)
Code: Alles auswählen
QByteArray::QByteArray ( const char * data, int size )
oder
QByteArray QByteArray::fromRawData ( const char * data, int size )
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Also beginnt mein Problem quasi schon hier:
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?
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;
}-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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...
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
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?
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:
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.
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: