durchsuche Forum nach -> itoa
Moin
Also die Frage ist ganz einfach und ist wahrscheinlich auch mit einem satz beantortet, aber ich weiß die Antwort halt nciht.
Wie kann ich einen Integer einfach in einen Char umwandeln
Ich würde mir nämlich gerne die Werte die der Asuro von den Sensoren liest über die IR-Terminal Verbindungs ausgeben lassen.
Wenn ich aber an SerWrite() einfach nur die Adresse des Wertes übergebe, wird dieser natürlich als ASCII Zeichen interpretiert und nicht als Zeichen.
Also ich will zum Beispiel nicht dass ASCII Zeichen Nr. 1, sonder dass ASCII Zeichen, dass die 1 darstellt. Ich denke ihr wisst was ich meine und dafür muss es doch eine einfache Möglichkeit geben.
Ich hab mir schon mal die stdlib.h angeguckt, aber 1. weiß ich nciht ob man die so einfach auch im Asuro C verwenden kann und 2. bin ich mir nicht sicher ob da die Funktion drin ist die ich brauche.
Danke für die Hilfe
Andun
www.subms.de
Aktuell: Flaschcraft Funkboard - Informationssammlung
durchsuche Forum nach -> itoa
achso
ok
danke.
Nachtrag:
Ich hatte diese Funktion schon probiert. Aber ich war zu blöd, dran zu denken einen Header einzubinden. Dann hatte ihc hier in meine C Referenz geguckt, aber natürlich nichts gefunden.
Hier mal die Zusammenfassung, für alle die das hier auch mal finden:
Du musst stdlib.h includieren.
Dann sind die Warnungen weg.#include <stdlib.h>
char *itoa(int value, char *string, int radix);
PARAMETERS
value:
Is the integer to be converted to string representation.
string:
Points to the buffer that is to hold resulting string. The resulting string aray be as long as seventeen bytes.
radix:
Is the base of the number; must be in the range 2 - 36. [Also normalerweise 10, beim Dezimalsystem]Übrigens: itoa ist keine Standard-Funktion (=nicht im C-Standard enthalten). Das solltest du immer im Hinterkopf behalten, wenn du itoa einsetzt. Das korrekte Vorgehen in C wäre die Funktion sprintf. Weil die für Mikrocontroller aber häufig überdimensioniert ist, bieten viele Bibliotheken eben (entgegen des Standards) die Funktion itoa an.
www.subms.de
Aktuell: Flaschcraft Funkboard - Informationssammlung
DU meinst int -> char?
Oder String (char*) ?Code:int an_int; char a_char; a_char = (char) an_int;
Glaub eher er meint, wenn er z.b. dezimal 78 anzeigen will, dann auch 78 angezeigt wird. Und nicht 'N' in diesem Falle.
Das Prob hab ich auch atm. Mein Term interpretiert die Zeichen falsch
Hat jemand Lösung bzw. Lösungsansätze für das Prob ??
btw, diese itoa-Funktion gibts bei mir nich inner stdlib, nur die atoi.....
@schamp: Ich wusste ja auch nichts von der Funktion weil sie ja nicht in den Referenzen auftaucht.
Du kannst auch die sprintf() verwenden aus der stdio.h, aber das Problem ist hier, dass die Datei halt stark größer wird, als man es eigentlich braucht.
www.subms.de
Aktuell: Flaschcraft Funkboard - Informationssammlung
Ist die falsche Fragestellung. Hier soll kein int in ein char (die beiden Typen sind equivalent) sondern in einen Hex-String umgewandelt werden. In etwa so:
Das ist allerdings Linux-C. Keine Ahnung, ob es auf dem AVR so kompiliert.Code:static const unsigned char hex[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char a = 'A'; // int a = 65; printf("%c%c\n", hex[a/16], hex[a%16]);
Also mein avr-gcc (3.4) nimmt nach
#include <stdlib.h>
brav das itoa() ist der libc.a.
Oder selber Hand anlegen:
buf[] enthält danach den ASCII-String mit abschliessender '\0'.Code:char buf[6]; void itoa (unsigned short num) { char i; for (i=4; i>=0; i--) { char digit = num % 10; if (i < 4 && num == 0) digit = ' '; else digit += '0'; num /= 10; buf[i] = digit; } }
Die '\0' wird schon im startup Code geschrieben. Das geht aber bestimmt noch kürzer und schneller mit der div() Funktion, die gleichzeitig Rest und Quotient liefert.
Falls dein Terminal das nicht darstellt wie gewohnt, musst du eben noch den ASCII nach Terminal-Sonderlocke-Format konvertieren.
Lesezeichen