Moin,
Diese "Umwandlung" ist nur Formsache. Ob dieser Platz im Speicher jetzt Teil eines Strings ist oder eines ints, letztendlich sind genau die gleichen Bits gesetzt. Deswegen funktioniert auch "Serial.write" - der Wert 65 (nicht der String "65") wird nämlich als 'A' interpretiert - ohne Konvertierung oder sonst was.
Der Umweg über printf und ähnliches ist daher mit Kanonen auf Spatzen geschossen.
Ignorieren wir mal für eine Sekunde Arduino String und schauen uns stattdessen die primitivere Form, ein char Array an. Folgende Zeilen sind allesamt äquivalent; sie bedeuten
exakt das gleiche, nur anders geschrieben.
Code: Alles auswählen
char someText[12] = "Hello World";
byte someText[12] = "Hello World";
byte someText[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', 0x00};
byte someText[12] = {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x00};
Wenn also Buchstaben und Zahlen exakt das gleiche sind, wie können sie unterschieden werden? Wie kann Arduino String() dazwischen unterscheiden? Ganz einfach, String, und so ziemlich alles andere geht davon aus, dass wenn es sich um ein Array von bytes handelt, dass es dann Text darstellen soll. Ein byte (kein Array), ein int, ein int Array, etc wird dagegen nicht so gedeutet. Weiteres wichtiges Merkmal: es ist Konvention, dass ein char Array mit einem Null byte endet. Da Arrays in C/C++ nicht wissen (können) wie groß sie sind, können Funktionen wie *.print so - und nur so - ganz leicht herausfinden, wo der Text zu Ende ist. Nutzt man "abcd" zum anlegen eines char Array, wird die Null automatisch hinzugefügt. Ansonsten muss man sie - wie oben gezeigt - selbst anhängen.
Anmerkung: Falls du dich gewundert hast, was der Unterschied zwischen 'a' und "a" ist, die Antwort lautet, 'a' ist ein einzelnes byte mit dem ASCII Code des Zeichens a. "a" ist ein char Array mit einem byte für das Zeichen a und einem Null byte. Entsprechend ist "abc" möglich, 'abc' jedoch nicht.
Was bedeutet das alles? Nun, deine Frage läuft letztendlich auf die Frage hinaus, wie du ein byte in ein byte Array umwandeln und mit einer angehängten Null versehen kannst. Antwort: z.B. so:
Code: Alles auswählen
byte someLetter = 'A'; // Äquivalent zu ... = 65;
char someText[2] = "x";
someText[0] = someLetter;
Anschließend funktioniert auch das Erstellen eines Arduino Strings:
Nachtrag zur Antwort von @Alexander470815: Wenn es schon eine so komplexe Funktion wie *printf sein muss, dann immer snprintf nehmen. Es ist eigentlich nie erwünscht, dass das Ergebnis zu groß werden kann, und dann andere Variablen im Speicher überschreibt.
Hoffe das hilft!
Max