Lesen von COM1 ASCII/Hex Problem

Alles rund um die Programmierung mit Qt
Antworten
Davidave
Beiträge: 33
Registriert: 26. Februar 2005 17:26

Lesen von COM1 ASCII/Hex Problem

Beitrag 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();
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Davidave
Beiträge: 33
Registriert: 26. Februar 2005 17:26

Beitrag 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?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Davidave
Beiträge: 33
Registriert: 26. Februar 2005 17:26

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du verstehst das komplett falsch!
ob ich nun hex 0x34 oder '4' schreibe ist genau das Gleiche!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Davidave
Beiträge: 33
Registriert: 26. Februar 2005 17:26

Beitrag 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?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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);
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten