Bilden eines QString aus einem char-Array mit max. Länge
Verfasst: 8. Mai 2009 15:13
Hallo,
Ich habe das Problem, das ich aus einem Datensatz Character-Arrays in QString-Objekte überführen muß. Solange diese Arrays nicht bis zur Halskrause gefüllt sind, kein Problem.
wenn ich sicher sein kann, das der String immer voll gefüllt ist, ebenfalls kein Problem:
Probleme tauchen auf, wenn der String mal mit \0 abgeschlossen ist, mal bis zum letzten Byte mit druckbaren Zeichen gefüllt ist.
Verwende ich die 1. Variante, wird mir an die voll gefüllten Strings hinten der Inhalt der nächsten Felder angehängt (solange nicht \0), verwende ich die 2. Variante, versucht mir Qt, auch die am Ende befindlichen, nichtdruckbaren Zeichen (\0 plus der restliche Inhalt bis zum Ende des Arrays) anzuzeigen. Beides nicht ganz erfreulich.
Ich kann zwar das ganze dahingehend umgehen, das ich entweder vorher mit memcpy in ein größeres, mit \0 vorbelegtes Array umkopiere, oder das mit QString::fromLatin1(array) erzeugte QString-Objekt hinterher mit truncate(int) oder left(int) abschneide, aber beides ist natürlich nicht allzu elegant und ich werde den Verdacht nicht los, das QString eine entsprechende Funktion schon mitbringt - oder liege ich hier falsch?
Wie würden außerdem truncate() bzw. left() bei UTF8 arbeiten, wenn die Anzahl der Character nicht mit der der Bytes übereinstimmt?
Gruß
Tilman (Räger)
[/code]
Ich habe das Problem, das ich aus einem Datensatz Character-Arrays in QString-Objekte überführen muß. Solange diese Arrays nicht bis zur Halskrause gefüllt sind, kein Problem.
Code: Alles auswählen
QString::fromLatin1(array);
Code: Alles auswählen
QString::fromLatin1(array, sizeof(array));
Verwende ich die 1. Variante, wird mir an die voll gefüllten Strings hinten der Inhalt der nächsten Felder angehängt (solange nicht \0), verwende ich die 2. Variante, versucht mir Qt, auch die am Ende befindlichen, nichtdruckbaren Zeichen (\0 plus der restliche Inhalt bis zum Ende des Arrays) anzuzeigen. Beides nicht ganz erfreulich.
Ich kann zwar das ganze dahingehend umgehen, das ich entweder vorher mit memcpy in ein größeres, mit \0 vorbelegtes Array umkopiere, oder das mit QString::fromLatin1(array) erzeugte QString-Objekt hinterher mit truncate(int) oder left(int) abschneide, aber beides ist natürlich nicht allzu elegant und ich werde den Verdacht nicht los, das QString eine entsprechende Funktion schon mitbringt - oder liege ich hier falsch?
Wie würden außerdem truncate() bzw. left() bei UTF8 arbeiten, wenn die Anzahl der Character nicht mit der der Bytes übereinstimmt?
Gruß
Tilman (Räger)
[/code]