QString aus QByteArray
-
Hallo alle miteinander,
ich habe derzeit ein kleines Problem.
Ich empfange einen Netzwerkstream und speichere ihn direkt in ein QByteArray.
Die gesendeten Daten sind UTF-8-codiert.
Ich möchte nun aus diesem QByteArray einen QString erzeugen.Mein Problem ist, dass die Methode, die ich gefunden habe, erwartet, dass das QByteArray ASCII-codiert ist.
Hat jemand eine Idee, wie ich aus meinem UTF-8-QByteArray einen QString bekomme.
Hier der Code:
Einlesen:QByteArray block; block = socket->readAll();
Umwandlung:
QString string(block);
(Wie gesagt, der Code zur Umwandlung liefert einen leeren String zurück!)
Danke im Voraus für jede Hilfe.
Ciao,
Prof. MAAD
-
Hallo,
Nachdem ich ein bisschen im QT-Assistant gestöbert habe, würde ich folgenden Weg vorschlagen:
QString string( QString::fromUtf8( socket-readAll() ) );
Der Umweg über QByteArray lässt sich also ersparen, wie du siehst.
PS.: Das ist mein erster Beitrag in diesem Sub-Forum. Beschäftige mich zur Zeit mit der Softwareentwicklung mit dem QT-Toolkit
-
Danke für die Hilfe.
Ich habe es auf diese Art gemacht und es funktioniert problemlos.
Danke und Ciao,
Prof. MAAD
-
Habe das so gelöst, dann ist auch eine versclüsselung möglich...
void Client::write(QString str) { // cout << "Sending .... " << str << "|" << endl; QCString s; s.resize( str.length() + 1 ); s=str.data(); QByteArray b = qCompress ( s ); writeBlock( b, b.size() ); }
QString str; void Client::socketReadyRead () { QCString s; s.resize( bytesAvailable() + 1 ); readBlock(s.data(), bytesAvailable()); QByteArray bs = qUncompress ( s ); str += bs; // cout << "Receiving: " << str << "|" << endl; emit ..... }
Grüsse,
Buggykite
-
grrrrrr
grrrrrr
[quote]grrrrrr[/quote]
grrrrrr grrrrrr grrrrrr
-
Bin wohl zu doof um das mit den Code, cpp hinzubekommen....
-
Buggykite schrieb:
Bin wohl zu doof um das mit den Code, cpp hinzubekommen....
Schau mal etwas weiter unten im Antwortfenster und entferne den HAken vor "BBCode in diesem Beitrag deaktivieren", dann sollte das klappen.
-
Mal 2 Fragen zu deinem Code, Buggykite:
1. Sieht es nur so aus, oder ist dein Code für Qt 3?
Ich verwende Qt 4.2. Wie meinst du das mit der Verschlüsselung?
Wieso soll mit der anderen Methode keine Verschlüsselung möglich sein.Ciao,
Prof. MAAD
-
Test
> 1. Sieht es nur so aus, oder ist dein Code für Qt 3?
> Ich verwende Qt 4.
Funkt auch mit Qt4 (dann aber mit den richtigen klassen Namen)
Habe das auf jeden Fall mit q3toq4 auch am laufen.> 2. Wie meinst du das mit der Verschlüsselung?
> Wieso soll mit der anderen Methode keine Verschlüsselung möglich sein.
Weil dein Stream direkt in ein String gewandelt wird und du dir die Möglickeit nimmst. In dem Falle hast du den einfach nicht.
Wenn du den Bytearray nicht bearbeiten willst/musst ist die Lösung natürlich einfacher und besser.
Den ByteArray kannst aber halt bearbeiten, mit zB qCompress oder zb einem kleine huffmann verschlüsselungs code, ssl usw....Gruesse,
Buggykite