eine deczimal zahl in ein ascii wert umwandeln

Hallo
ich finde einfach nicht richtiges dazu

Ich möchte einen Dec wert der in einen ascii wert umstellen.

zb "090" Deczimal
"Z" Ascii

( jeweils nur ein Ascii in der Variabele ) erhalte diese aber nur Dec :confused:

finde dazu nichts , ;o) da zu unwissend

Eine kleine Routine wäre schön

Danke

beschreibe dein Problem besser, mach einen Mini-Sketch der das Problem zeigt. Denn eigentlich ist das gerade aus:

void setup()
{
  Serial.begin(115200);// beginnt die serielle Übertragung
  char foo = 90;
  Serial.println(foo);
}


void loop() 
{

}

zb "090" Deczimal

Ich rate zur Vorsicht.
090 ist nicht Dezimal, sondern eher eine kaputte/ungültige oktale Zahl.

Merke:
Oktale Zahlen zeichnen sich in C/C++ durch eine vor laufende Null aus.

Tipp:
Vielleicht suchst du: atoi() oder sscanf()

Nein geht nicht

Als char bekomme ich 2 Stellen = "90"
oder "65"

möchte es in ene Variabel wandeln Ascii 90 = Z und wenn 65 = A

Hallo,

du verwechselt ASCII Code mit dem Zeichensatz der dahinter stehen.
Schau dir eine ASCII Tabelle an.
Der ASCII Code 48 ist die Ziffer '0'.
Der ASCII Code 65 ist der Buchstabe 'A'.

Wenn du den Wert 90 darstellen möchtest, dann musst du zwei ASCII Zeichen senden. Nämlich ASCII Code 57 und 48.
Mit Serial.write(65) wird zum Bsp. das 'A' im Terminal ausgegeben.

Hi

Ob Du
char variable='A';
oder
char variable=65;
schreibst, dürfte egal sein.
Beide Male steht exakt die gleiche Bitfolge im Speicher, Die Du Dir als 'A', 65, 0x41, 0101 anzeigen lassen kannst.

Zur Ausgabe wird Dir .write wohl helfen, sonst, zur Verarbeitung, ist Das ALLES genau das Gleiche.

MfG

Hallo

Ihr habt ja recht mit den frage stellen

int valo = 77;

Serial.print(F("serialwrite "));Serial.write(valo); // Ausgabe ist OK Aber das soll in eine Variabele
// da kommt M auf den Serial
// Möchte das ergebniss "M" aber nicht auf den Serial.... sonder in einen anderen String haben
// also String test = "M" wobei das M aus der zahl 77 usw erstellt werden soll
// es ist immer nur eine zahl 0-9 oder A-Z was als Zahl kommt
// meine sowas in der ART WIE
// int test = Serial.write(valo); <-- klar geht nicht weil Serial.write nicht gemacht dafür

//( ich möchte nichts verschicken)
//Danke Euch für Infos

Positiv:
Ich möchte einen Dec wert der in einen ascii wert umstellen.

Eine Variable enthält im Controller immer nur einen Zahl in Binärformat. Erst die Darstellung/Interpretation macht daraus eine Zahl, einen Buchstaben oder sonstwas.

Darum erklähr uns bitte genau was Du machen willst.
Grüße Uwe

habe noch gar kein Program

ich möchte mit Arduino Uno
einfach eine Zahl in den dazugehörigen Ascii haben, das in enier Variabele.
Ich bekomme immer 2 stellen als zahl "77" "78" und so weiter.
diese möchte ich dann wandeln in Ascii und an einen String anhängen

Hier kann man bei
CONVERT Decimal (Example: 97 98 99)
die zahl "77" eingeben und sieht den ascii daraus

CONVERT ASCII (Example: a b c)
zeigt dann
M

das M möchte ich in eine Variabele habem

Also
int valo = 77; // valo bekomme ich geliefert

Daraus eine ascii machen und in eine Variabele packen.

// int test = Serial.write(valo); <-- klar geht nicht weil Serial.write nicht gemacht dafür

dann hätte die Variabele "test" den wert "M"

die Variabele test kann ich dann weiter verarbeiten

Ich weiß am Computer sitzen und sehen und sprechen ist einfacher

Eben sagte ich schon:

Tipp:
Vielleicht suchst du: atoi() oder sscanf()

Was gefällt dir daran nicht?

Wenn Du 2 Zeichen von Seriell bekommst, dann musst Du diese doch erst mal zusammensetzen und mit \0 abschließen.
Woher willst Du wissen, welche 2 Zeichen zusammen gehören?
Da wäre ein Endekennzeichen (z.B. '\n' = LineFeed = LF) sinnvoll.

Dann mit atoi in eine Zahl umwandeln.

Gruß Tommy

Hallo :slight_smile:

danke für die Tips.
ich denke ich muss aufgeben.
Grüße

Ich für mich zu viel

Hi

Wenn Du MEHR als nur C&P willst, wirst Du Dich etwas mehr anstrengen müssen.
Mit 'och, dann eben nicht' wirst Du uns kaum beeindrucken.

Strings solltest Du meiden, da besonders die Manipulation (das Arbeiten damit) schnell den Speicher sprengt - be jeder Änderung wird ein neuer Speicherbereich gesucht, wo der neue String hin passt - Das geht nicht all zu oft gut.
strings (C-Strings) sind quasi Arrays, in Denen Zeichen (char) stehen.
Abschließend ist zwingend eine \0 (also eine NULL), damit die Funktionen im Arduino erkennen, wo Schluß ist.
Weshalb man in ein char-Array[6] eben maximal 5 Zeichen speichern DARF, sonst gibt's wieder Müll.

Allerdings habe ich immer noch nicht gerafft, was Du eigentlich vor hattest - die Information 65/'A'/0x41 ist überall gleich, das einzige Problem bei der ganzen µC-Programmiererei ist der Mensch, Der die Daten auch sehen will - in diesem Fall: Du :wink:
Wenn Du statt 0x41 '65' sehen willst, musst Du was Anderes machen, als wenn Du 'A' sehen willst.

MfG

Kann Euch verstehen.
Aber grade die sich nicht auskennen stellen hier fragen.
( Sind halt unter umständen wie ich ganz wenig in dem Thema und wollen halt was machen
was halt wie bei mir Ihre Fähigkeiten übersteigt )

schön wäre gewesen.
Hallo Duda so wird das nichts. Dein wissen ist zu wenig.
Wo kommst DU her ??
Dann kann man sich mal treffen

So kann das nichts werden.
Es ist ein Program was nicht von mir ist.
Da wollte ich weiteres in die Anzeige Display bringen.
Einiges habe ich ohne großes wissen hin bekommen.

Einiges halt nicht
SCHADE aber so ist das

Das mit dem tauchen einer Zahl gegen einen Ziffer, versuche ich jetzt durch

Mache einen String mit Ascii Zeichen
und lese dann den Buchstaben aus, die Stelle ist ja klar

zb "ABCD........................"
65 = A
90 = Z
die Zahlen die kommen immer -64 dann ist es 1 also erste Stelle vom String usw usw
Ist warscheinlich nicht ganz richtig , aber das kann ich noch programieren.

die Zahlen die kommen immer -64 dann istZ = 26 also 26´te Stelle vom String
Ist warscheinlich nicht ganz richtig , aber das kann ich noch programieren.

Das Board ist auch kein Arduino sondern ein ESP32 T-Beam

Trotzdem danke
Und Frohe Weihnacht

Es ist schade, dass du unsere Hilfestellungen nicht verstehst.
Es ist auch schade, dass ich deine Fragestellung bisher nicht verstanden habe.

Meine Intuition sagt: Du bewegst dich auf einem falschen Ast.

Das kann ich natürlich so nicht beweisen...

Tipp:
Zurück zum Anfang!
Beschreibe dein Problem, nicht den (irrigen) Weg.

Frohe Weihnacht :slight_smile:

Das Program hat viele libraries und viele Include

Ist mitlerweile so von mir zerfledert das es mit dem open SOurce nicht mehr zu vergleichen ist.

ABER ES MACHT DAS WAS ES SOLL "JETZT" ( NAJA FAST )

2 Dinge fehlen mir noch um zu frieden zu sein :slight_smile:
( Wegen Eure Typs und Google brachten mich weiter )

Ich kann das Programm gerne mit Mail versenden ( ist 0,7mb )
Dazu müste aber klar, ein ESP32 T-Beam mit einem OLED Display, auch vorhanden sein.

Oder ich sende es einfach mit der Post oder würde es bringen

( Verwende Wlan , RF Sender - empfänger usw ) :slight_smile: :slight_smile:

Den auf diese art, wie bisher , würde man nicht weiter kommen.
Es ist nach meiner Meinung zu verschachtelt um nur ein Teil zu senden. ( Wie gesagt meine Meinung )

Aber trotzdem danke
Ich weis Ihr würdet helfen, wenn ich es vernünftig rüber bringen könnte :confused:

Aber alles wird gut :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:

Frohe Weihnacht :slight_smile:

Hallo
sagt mal könnt Ihr mir da helfen , das ich es vieleicht etwas begreife

Serial.print("einfach*");Serial.println(ThisAircraft.addka); Serial.print("einfach"); // einfach 122
Serial.print("HEX**");Serial.println(ThisAircraft.addka,HEX); Serial.print("HEX"); // HEX* 7A
Serial.print("DEC*");Serial.println(ThisAircraft.addka,DEC); Serial.print("DEC"); // DEC 122
Serial.print("BIN*");Serial.println(ThisAircraft.addka,BIN); Serial.print("BIN"); // BIN 1111010
Serial.print("Ausgabe write*");Serial.write(ThisAircraft.addka ); Serial.print("write"); //Ausgabe write z

Warum wird bei "einfach nicht z ausgegeben ??

Ich möchte das auf ein Oled anzeigen. u8x8 dort wird aber 7a ausgegeben
nicht wie gewollt ein z

Kann mir vieleicht jemand dazu eine Routine machen / geben

So das z ausgegeben wird und nicht der HEX wert

Oder ein Beispiel hier rein setzen wie es geht ?

Ich kanns echt nicht

Danke

Du siehst doch dass du write() brauchst damit 'z' kommt. Dann verwende das auch.

Ansonsten einfach mal mal in die Print Klasse schauen:

size_t println(unsigned char, int = DEC);
size_t println(int, int = DEC);

Wenn man nichts angibt wird also DEC gemacht

Entsprechend kannst du auch nachschauen was die Display Klasse intern macht

ThisAircraft.addka

Leider ist geheim, was das für ein Datentype ist/liefert.

Das sind so Kleinigkeiten....
Um die man sich kümmern sollte, wenn man Probleme mit der Präsentation von Daten hat.

Serial.print("cast*");Serial.println((char)ThisAircraft.addka);  Serial.print("*Variante"); 

Es ist immer wieder das gleiche!
A: Welchen Datentype haben die Quelldaten?
B: Welchen Datentype muss die Präsentation bekommen, damit sie das zeigt, was ich will?
C: Daraus ergibt sich ob und wie die Daten konvertiert werden müssen.

u8x8->drawString(8, 2, (char)ThisAircraft.addka);

Mit der Serial ausgabe das stimmt
dachte könnte das so in die Oled Display anzeige übernehmen
nix

Geheim ist nix aber ich bin wie Ihr schon merkt, kein Programierer.
Wurschle mich durch
In den ganzen verschachtellungen usw weis ich selbst nicht was für ein typ das ist
Auf jeden fall geht das Serial.println
Nur halt das Display zeigt immer noch 7a statt z