Seite 1 von 1

Lesen von COM1 ASCII/Hex Problem

Verfasst: 26. April 2007 14:54
von Davidave
Hallo zusammen.
PC1 schickt Hex-Zahlen (34 35 36 37) über COM1 zu PC2.
Dort habe ich ein Programm, das auf der Basis von Win_QextSerialPort, das die Zahlen empfängt.

Das Problem ist hier:
Das QByteArray, indem sich die Zahlen (s.o.) befinden konvertiert diese sofort in ASCII-Zeichen.
Aus (34 35 36 37) wird sofort (4567).
http://www.asciitable.com/ (hier die Code-Table)

Ich möchte aber die originalen Hex-Zahlen haben.

Dazu müsste ich
a) ASCII zu Hex konvertieren, oder
b) bereits während des Lesen von COM1 was verändern.

Hat jemand eine Ahnung und könnte mir bitte helfen?
Grüße und Dank!

Code: Alles auswählen

//port ist geöffnet und tut es soweit auch
myByte = port->readAll();
string = myByte();

Verfasst: 26. April 2007 15:02
von Christian81
Aber das ist doch das gleiche - wenn ich 0x34 sende, wird 0x34 empfangen und wenn ich das darstelle wird es als '3' dargestellt - wo ist das Problem?

Verfasst: 26. April 2007 15:09
von Davidave
Naja, vielleicht sehe ich ja mittlerweile den Wald vor lauter Bäumen nicht mehr, aber...

Abhängig vom Signal, das PC1 schickt (im Hex-Code), will ich auf PC2 eine Aktion aufrufen.

Nun kann ich das Signal aber nicht direkt interpretieren, da mein QString daraus "4567" gemacht hat.

Stell dir im einfachsten Fall sowas vor, wie:

Code: Alles auswählen

if (string == "34353637")   tudies()
Oder verstehe ich hier was wirklich grundlegend falsch?

Verfasst: 26. April 2007 15:17
von Christian81
Du empfängst keinen QString sondern ein QByteArray. Darin stehen deine Daten genau so wie Du sie gesendet hast. Wenn Du sie natürlich anzeigst werden sie als char-Werte angezeigt - wie auch sonst?

Verfasst: 26. April 2007 15:57
von Davidave
Ok, soweit habe ich dich verstanden.

Habe mal nachgefragt bei jem. der das Programm (PC1 -> COM1) geschrieben hat.
Die Hex-Zahlen werden wohl noch vor der Übertragung auf PC2 zu ASCII-Code gemacht.

Jetzt noch eine Sache:
Gibt es eine Möglichkeit z.B. den Char "4" zu int (mit Basis 16) zu konvertieren?

Grüße

Verfasst: 26. April 2007 16:04
von Christian81
Du verstehst das komplett falsch!
ob ich nun hex 0x34 oder '4' schreibe ist genau das Gleiche!

Verfasst: 26. April 2007 16:25
von Davidave
Naja, dass:
52 (dez.) = 0x34 (hex) = 064 (okt.) ="4" (char) ist, ist mir schon klar.

Es geht mir aber doch darum, dass ich die "4" im String habe, nicht aber nachgucken will, was "4" (char) in hex ist.
Sondern ich möchte am liebsten, dass die "4" solange rumgereicht wird, bis ich schließlich in einem anderen String "0x34" stehen habe.

Verstehst was ich meine?

Verfasst: 26. April 2007 16:29
von Christian81
Aber mit 0x34 als String kann man nichts anfangen...
das geht mit einem einfachen printf (oder QString::sprintf())

Code: Alles auswählen

char a = '4';
printf("0x%x", a);