Hex-Werte mit Präfix „0x“ kennzeichnen

Ein nachgeschalteter Prozessor wünscht Serial Daten in Form von:
Serial1.write(0xA0);

Die Daten liegen jedoch im Hex-Format vor wie hier als Beispiel A0. Was fehlt, ist der Vorbau 0x. Jetzt kommen Ideen wie: erst 0x senden und gleich A0. Fachpersonen wissen jedoch, das funktioniert nicht. Auch über eine String-Verkettung nicht direkt möglich. Vermutlich könnte das über int8_t gelingen.

Würde mich sehr freuen, wenn sich jemand meldet. Nach sehr langer Suche konnte leider nichts gefunden werden.

Herzlichen Dank!

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Vielen Dank für den freundlichen Hinweis. Bitte um Nachsicht. Vielen Dank für Ihre Hilfsbereitschaft!

Meinst Du als Zeichenkette?

Das wäre dann ein ganz anderer Typ.

Welcher Typ ist es also, Zeichenkette, Zahl oder was ganz anderes?

Vermutlich hilft Dir snprintf weiter.

Hmm.
Ich hätte zwei Fragen:

  1. Was soll denn erzeugt werden? Eine Ausgabe 'Serial1.write(0xA0);' oder eine Zeichenkette '0xA0' auf Serial1 ausgegeben werden?
  2. Wie liegt das 'A0' vor? Als int und Artverwandte oder als Zeichenkette?

diese Angabe ist unpräzise.

Wenn wir annehmen, dass der Empfänger die Daten wirklich als

0xA0

erwartet (vermutlich verarbeitet dieser das mit einem read - nicht mit einem write)

Dann schreibst halt

Serial.print ("0x");
if (value < 0xA); Serial.print("0");
Serial.print(value, HEX);

Vielen Dank für die Antwort. wenn ich Serial.1write(0xA0) an den Prozessor händisch sende, reagiert dieser sofortund führt gewünschten Befehl aus. Wenn ich 0x mit A0 verbinde, reagiert der Prozessor nicht. Dieser reagiert nur mit 0x. Ich hatte schon vieles vergeblich versucht.

mit

Serial.1write(0xA0)

bekommt der auch nur ein A0 ... da kommt kein 0x davor beim Empfänger an!

du kannst ihm auch ein
Serial1.write(160)

senden, auch das ist A0 für ihn. ...

oder

Serial1.write(0b10100000);
alles das gleiche...

1 Like

Der Prozessor braucht das als Anweisung. Der reagiert sonst nicht. sobald er bei jedem Byte ein 0x gesendet bekommt, führt er jeden Befehl aus.

Ich hatte versehentlich A0 angegeben, das war falsch. Ich hatte 0x0A verwendet:

Serial3.write(0b00001010);

Korrekt, der Prozessor erkennt den Befehl. Bin etwas überrascht

nochmal:
das ist alles das gleiche.
Das sind Zahlenrepräsentationen für uns Menschen.
Dem Computer ist das wurst.
Für den ist alles Binär.

Du schreibst im SourceCode halt Dezimal, Hex, oder Binär (oder Oktal..) was auch immer dir gelegen kommt.
Übertragen wird das alles sowieso binär. in High oder Low ..

1 Like

Fiolgendes macht der Prozessor auch.
Serial3.write(10);

Bitte um Nachsicht, das hätte ich selbst ausprobieren können.

Ja vielen Dank, das habe ich verstanden. Ich muss mir dazu nochmals weitere Überlegungen anstellen.

Hier ist eine Funktion void hexPrint(const char zeichen) drin.

1 Like

In welchem Format liegt das bitte dann vor?

Serial3.write(10);

Es wird keine Variable verwendet. Die brauche ich jedoch. Das wurde auch zum Problem.

das ist dezimal 10.
ist gleich Hex A
ist gleich Binär 00001010

byte valueD = 10;
byte valueH = 0xA;
byte valueB = 0b00001010;

alle 3 Variablen werden den gleichen Wert speichern.

1 Like

Ich kann nur sagen, es funktioniert. Zur Entschuldigung, vielleicht stimmt mit mir etwas nicht. einfach nur ganz grossen DANK!

kein Problem - das kommt so alle 3 Monate daher :wink:

Du könntest noch eine Antwort als Lösung markieren, und dich mit einem Herzchen bei den Leuten bedanken, die dir weitergeholfen haben.

1 Like

Danke für die wertvollen Hinweise, mache ich sehr gerne!

Wenn etwas mit dir nicht stimmt, ist es, dass du den Wert einer Zahl mit seiner menschenlesbaren Repräsentation/Darstellung verwechselt hast.
Beides hat dann den gleichen Wert, sieht nur anders aus.

1 Like