2016-04-06 14 views
0

Ich möchte Daten zwischen Qt und einem μC über die serielle Schnittstelle COM senden.Serielle Schnittstelle schreiben: ungültige Konvertierung von 'int' nach 'const char *'

Ich versuche, ein Zeichen zu senden, aber wenn ich serial->write(250) verwenden, bekomme ich diesen Fehler:

invalid conversion from 'int' to 'const char*

Aber wenn ich serial->write("A") tun, es funktioniert. Hast du eine Ahnung warum?

+0

Könnten Sie etwas von Ihrem Code zeigen? Bitte veröffentlichen Sie ein [minimales, vollständiges und verifizierbares Beispiel] (http://www.stackoverflow.com/help/mcve). – owacoder

+0

Wenn Sie sagen "250 schreiben", was meinst du? Möchten Sie die Zeichenfolge '" 250 "' oder die Zeichenfolge '" \ xFA "', die aus einem einzelnen Byte mit dem Wert 250 besteht, senden? –

+0

Nein ich möchte 250 im dezimal 0xFA in hex senden – Ale

Antwort

0

250 wird vom Compiler vom Typ int interpretiert, und die serial->write()-Funktion erfordert einen const char * als Eingabe; Wenn Sie 250 als Zeichen senden möchten, müssen Sie den Typ umwandeln:

char cValue = 250; 
char *pCValue = &cValue; 
serial->write(pCValue); 

Beachten Sie jedoch, dass pCValue ein Zeiger auf die temporäre Zeichen und wird nur gültig, während c im Gültigkeitsbereich befindet. Ich schätze, Sie müssen am Ende des Arrays auch einen Null-Terminator hinzufügen, wenn Sie die Datengröße in der seriellen Klasse nicht angeben können, wie von owacoder hervorgehoben.

+0

Danke aber das nervt was, wenn ich viel Wert zum versenden habe? Ich kann keine Besetzung verwenden? – Ale

+0

Erstellen Sie ein char-Array, Beispiel mit 5 Werten: char-Werte [] = {150, 200, 100, 100, 100} (oder verwenden Sie vorzugsweise std :: array) oder std :: vector , wenn die Größe nicht fest ist (und Übergeben Sie die Daten() - Funktion des Vektors an die Schreibfunktion. –

+0

danke, wenn ich das tue serial-> write (values); Wie kann ich Werte [3] wählen? – Ale

0

Die verfügbaren Mitglieder auf QSerialPort für Schreibdaten sind diese von docs:

write(const char *, qint64) : qint64 
write(const char *) : qint64 
write(const QByteArray &) : qint64 
writeData(const char *, qint64) : qint64 
writeData(const char *, qint64) : qint64 

Wenn Sie serial->write(250) die Kompilierung werfen die Nummer zu einem int verwenden und threre ist kein Mitglied für einen int verwalten. Wenn Sie stattdessen serial->write("A") verwenden, kann das "A" in char * umgewandelt werden.

Für viele Byte senden Sie verwenden können QByteArray:

QByteArray cmd; 
cmd.append('A'); 
cmd.append('B'); 
cmd.append('C'); 
serial -> write (cmd); 

Auf diese Weise alle Zeichen senden und es gibt eine Menge nützlicher Qt-Klasse, die ein Objekt in eine QByteArray umwandeln kann; Zum Beispiel wird ein QString einfach wie folgt in QByteArray konvertiert:

QString str = "ABC"; 
QByteArray cmd = str.toLatin1(); 
serial -> write (cmd); 
Verwandte Themen