Die Frage hat sich erledigt. Ich hätte zwar gerne zweistellige Rückgaben gehabt (deshalb char* für Zahlen kleiner 9), aber das kann ich auch anders erledigen. Nach der Umstellung der Rückgabe von char* auf byte funktioniert alles wie es soll.
moment, kann nicht sein. :o
Wir schreiben doch ASCII Code von 0...9 und A ... z.
Diese 0 ist Ziffer 0 und damit ASCII Code 48.
'\0' ist ein Steuerzeichen und ASCII Code 0 bzw. NUL.
Laut meinem Verständnis auch logisch, sonst würde jede Leseoperation bei der Ziffer 0 enden und nicht beim Nullterminator.
Das ist nur so wie ihr sagt weil das ein char Array ist?
Was ich jetzt komplett nicht mehr verstehe.
Weil meine Testwert 0 ... 3 sowohl in ein char wie auch in den int Wertebereich passen.
Warum wird ein char Array anders interpretiert?
Bin gerade neben der Spur glaube ich.
Doch doch....
Dieser Teil stammt aus C und ist (leider?) schwach typisiert.
char ist nicht wirklich "Buchstabe", sondern definiert, als die kleinste adressierbare Einheit.
Nochmal:
Ein char ist die kleinste adressierbare Einheit.
char bedeutet hier nicht unbedingt Buchstabe. Auch wenn es oft/meist dafür verwendet wird.
Der übliche C-String ist nur eine Vereinbarung/Konvention.
Eben die Null am Ende.
Der Compiler selber kennt sowas nicht wirklich.
Ein paar Library Funktionen halten sich an diese Vereinbarung. Längst nicht alle.
char a = 0:
ist das gleiche wie
char a = '\0';
Beide Varianten schreiben eine binäre Null in die Variable.
Du könntest da auch eine 8 rein schreiben, wenn dir danach ist
Das sind die Dezimal-Werte der ASCII Zeichen. Damit bist du bei den Steuerzeichen
Warum sind das plötzlich Dezimalwerte vom ASCII Zeichen? Das ist das was ich nicht verstehe.
Nur weil das ein char und nicht int Array ist? Obwohl das alles in die Wertebereiche passt.
char[]={0,1,2,3}; funktioniert schon - nur scheitert .print an der /0, Die Ihm Das das Ende des C-String signalisiert.
Also char[2] wäre immer noch 2 - nur angezeigt bekommst Du Das halt nicht von .print.
wir verstehen uns glaube ich noch nicht. Mein Problem ist noch nicht deutlich gewurden, denke ich.
Ich fange nochmal an.
Wo ist der Unterschied zwischen ... ?
würde bedeuten, dass man char Arrays wirklich nur für Zeichenketten verwenden kann?
Man ist gezwungen für Integerwerte, auch wenn diese in den Wertebereich von char passen und damit char ausreichend wäre, dann ein int Array verwenden?
Kann man das so sagen? Dann hätte ich mich wieder gefangen.
Denke daran dass print()/println() mehrfach überladen ist. So gibt es print(char*) und print(int). Gerade bei der 0 hat der Compiler da Probleme das zu unterscheiden und wählt nicht immer das aus was du willst. Das ist der Grund weshalb nullptr eingeführt wurde!
Bei write() gibt oder gab es das gleiche Problem. Vor allem in der Wire Klasse wo Wire.write(0) eine häufige Operation ist
Du kannst char ruhig für Zahlen verwenden. Das ist halt ein Byte mit Vorzeichen. Aber wenn man das an Funktionen wie print() übergibt braucht man eventuell Casts damit die richtige Version aufgerufen wird
so langsam dämmerts mir wieder jetzt wo du das erwähnst. Hatten wir das nicht vor langer Zeit mal ähnlich mit Serial.write wo du mir sagstest ich muss vorher auf int casten damit das sicher klappt? Irgendwie war doch was gewesen? Dann wäre jetzt alles wieder okay für klare Bilder.
Edit:
alles klar, alles geklärt, hatte sich jetzt zeitlich überschnitten. Danke!