2016-07-28 13 views
-2

Ich arbeite mit QT Creator (MinGW 5.3.0 C++, Windows) und möchte einige serielle Verbindung Hex-Daten schreiben. Ich habe einen Weg gefunden, aber da stimmt etwas nicht. Nur eine Hex-Datei wird falsch konvertiert.Convert Char in Bytearray mit Hex-Daten 0x31

Ich hoffe, dass mein Code hilft, zu verstehen.

static const unsigned char mytestUC[] = {0x04,0x31,0xD2,0x01, 0xA1}; 
enum { NBYTES = sizeof(mytestUC) }; 
const char *mytest = reinterpret_cast<const char*>(mytestUC); 
QByteArray testdata = QByteArray::fromRawData(mytest, sizeof(mytest)+1); 
qDebug()<<"testdata "<<testdata; 

Ich würde denken, sollte die Ausgabe sein: Testdaten "\ x04 \ 31 \ Xd2 \ x01 \ xA1"

Aber im wirklichen sieht es wie folgt aus: Testdaten "\ x04" "1 \ xD2 \ x01 \ xA1 "

Ich habe einen anderen Weg versucht, meine Hex-Daten direkt in das QBytearray mit append zu schreiben.

testdata .append((char) 0x04); 
testdata .append((char) 0x31); 
testdata .append((char) 0xD2); 
testdata .append((char) 0x01); 
testdata .append((char) 0xA1); 

Warum konvertiert das Programm nur die 0x31 in die falsche Richtung und wie kann ich es besser machen? Gibt es eine einfachere Möglichkeit, Hex-Daten in QBytearray zu schreiben?

+0

Weißt du nicht, dass mytestUC bereits ein Byte-Array ist? – deviantfan

+0

... und dass 0x31 '1' ist? – deviantfan

+0

Nein, ich weiß es vorher nicht. Ich habe versucht, mytestUC mit Serial-> write zu verwenden, aber es funktioniert nicht, denn "write" benötigt ein const char und ich brauche ein unsigned char. Einige Hex-Daten sind größer als 0x7F. Jap 0x31 ist 1, aber ich brauche es in Hex zu senden. – knowless

Antwort

0

Wenn Sie das QByteArray drucken, versucht es alle Zeichen in ASCII zu konvertieren, aber der numerische Wert ist 0x31. Im seriellen Port werden Daten im Binärformat gesendet, so dass das Zeichen '1' als 0x31 gesendet wird. Um zu sehen, Daten in hexa von einem QByteArray können Sie die Funktion toHex(), verwenden, zB:

QByteArray ba; 
ba.append((char) 0x31); 
ba.append((char) 0x32); 
ba.append((char) 0x33); 
ba.append((char) 0x34); 

qDebug() << "char: " << ba; 
qDebug() << "hexa: " << ba.toHex(); 

Der Ausgang wird sein:

char: "1234" 
hexa: "31323334" 

Es gibt eine Funktion qint64 QIODevice::write(const QByteArray &byteArray) in QSerialPort Klasse.

+0

Thx !!! .toHex() funktioniert gut. – knowless