Forum: PC-Programmierung Qt QByteArray Null anhängen


von Roland (Gast)


Lesenswert?

Hallo Forum,

ich habe ein Problem mit Qt:

ich versuche einem QByteArray eine 0x0 anzuhängen:

 qba.append(4);
 qba.append("text");

 qba.append(0);
 qba.append(0x0);

die ersten zwei Aufrufe funktionieren wie gewünscht, die letzten nicht:
 error: call of overloaded ‘append(int)’ is ambiguous
es werden mir dann noch alternativen vorgeschlagen: char, const char*, 
const QByteArray&, const QString&

ich denke, ich brauche hier die stringterminierende Null.
Das Script zu dem ich das Program schreibe sagt "Die Sequenz wird durch 
ein Längenfeld gebildet, das dem Text vorangestellt wird, der Abschluß 
wird durch ein leeres Textfeld gebildet, dem die 0x0 vorangestellt ist", 
das Beispiel sieht entsprechend so aus: 0x4Text0x0.

Der erste Teil läßt sich erzeugen wenn ich

 qba.append(4);
 qba.append("text");

nehme, aber egal wie ich mich anstelle, ich bekomme keine neue Null 
dazu, das einzige was hilft ist qba.resize(qba.size()+1) ... aber das 
kann es doch nicht sein. Was muss ich tun?

Mit freundlichen Grüßen
Roland

von Jean P. (fubu1000)


Lesenswert?

Hi,

Roland schrieb:
> ich versuche einem QByteArray eine 0x0 anzuhängen:
Die Funktion "append" sollte den String schon Null terminieren.
Aber wenn du noch ne extra Null brauchst, wieso nicht so:
1
qba.append("\0");

Gruß

von Rolf Magnus (Gast)


Lesenswert?

Roland schrieb:
>  error: call of overloaded ‘append(int)’ is ambiguous
> es werden mir dann noch alternativen vorgeschlagen: char, const char*,
> const QByteArray&, const QString&

Zu deutsch: Es gibt keine Funktion append, die direkt mit einem int 
umgehen kann. Der übergebene Wert muß also in einen anderen Typ 
konvertiert werden. Das kann der  Compiler nicht implizit tun, da er 
mehere Alternativen dafür hat. Du muß ihm daher durch einen Cast 
explizit sagen, welche der angegebenen Alternativen er nutzen soll.

von Korrektur (Gast)


Lesenswert?

Genauer:

Es gibt zwar eine überladene Variante für int, aber der Wert "0" ist 
nicht eindeutig, da er sowohl als int als auch als "(char*)0" bzw. NULL 
zu interpretiert werden kann.
Das besagt übrigens auch die Fehlermeldung.
Im neueren C++-Standard gibt es "nullptr", der diese Mehrdeutigkeit 
auflöst.

von Roland (Gast)


Lesenswert?

Habt vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.