einen QString als ASCII ausgeben in einem lineEdit
-
Hallo!
hätte kurz eine Frage.
ich möchte gerade zu übungszwecken ein kleines programm schreiben, dass aus einem string den der benutzer eingibt den kompletten ASCII wert in einem anderen lineEdit ausgibt.gibt der benutzer "hallo" ein, soll "0x48 0x61 0x6C 0x6C 0x6F" oder "48 61 6C 6C 6F" rauskommen.
ich krieg aber die umwandlung nicht gescheit hin.
habe es wie folgt versucht:
QString eingabeString = Eingabe->text(); Ausgabe->setText(eingabeString.toAscii()); // Eingabe und Ausgabe sind lineEdit
aber dann kriege ich exakt das gleiche raus, was ich eingegeben habe.
Ich habe es auch versucht mit einer for-schleife zu machen, nur komme ich da auch nicht weiter!
danke für eure hilfe
-
Das ist doch auch korrekt.
Ascii heisst ja nicht, das du da Zahlen oder hex Werte bekommst.
Schau mal in die Doku von QString, wie du das nach Hex konvertieren kannst.
-
habe in der Doku nachgeschaut und nur die funktion arg gefunden. aber damit krieg ichs nicht hin
-
QtNoob schrieb:
habe in der Doku nachgeschaut und nur die funktion arg gefunden. aber damit krieg ichs nicht hin
Die Funktion gibt den String im Ascii Zeichensatz zurück.
Du musst evtl. noch durch den string iterieren und jeden buchstaben zu hex/int konvertieren, und das dann in einen Textstream z.b. schreiben.
-
Eine Schleife, http://doc.trolltech.com/4.5/qchar.html#toAscii und Casting sin deine Freunde.
-
aMan schrieb:
Eine Schleife, http://doc.trolltech.com/4.5/qchar.html#toAscii und Casting sin deine Freunde.
vielen dank, hat mir sehr geholfen.
habs jetzt wie folgt gelöst:
void UmwandlerDialog::umwandeln() { QString eingabeString = Eingabe->text(); QString ausgabeString = ""; QString test; for(int i=0;i<eingabeString.length();i++){ int tmp = eingabeString[i].toAscii(); ausgabeString+=test.setNum(tmp,16); ausgabeString+= " "; } Ausgabe->setText(ausgabeString.toUpper()); }
wie kann ich denn am besten die funktion setNum verwenden, ohne ein extra QString anzulegen?
-
Du wirst afaik nicht ohne zusaetzlichen String auskommen, aber der Overhead ist minimal. Hier ist eine Version mit weniger Code. Der Compiler muesste den Konstruktor imo aus der Schleife herausoptimieren, so, dass er nur einmal aufgerufen wird. Wenn das nicht passiert, ist es bei einer Schleifenlaenge von unter 20 000 auch wurscht (danach wuerde ich einfach nachmessen).
ausgabeString+=QString().setNum(tmp,16); ausgabeString+= " ";
-
aMan schrieb:
Du wirst afaik nicht ohne zusaetzlichen String auskommen
Doch, das geht mit QString::number() (statisch).
-
Das erstellt auch einen zusaetzlichen QString, ist aber eleganter.
Edit:
hier ist der Source von QString::number(..)QString QString::number(long n, int base) { QString s; s.setNum(n, base); return s; }