-         

Ergebnis 1 bis 8 von 8

Thema: Wie kann ich einen Integer einfach in einen Char umwandeln

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    29
    Beiträge
    826

    Wie kann ich einen Integer einfach in einen Char umwandeln

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    durchsuche Forum nach -> itoa

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    29
    Beiträge
    826
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    DU meinst int -> char?
    Code:
    int an_int;
    char a_char;
    
    a_char = (char) an_int;
    Oder String (char*) ?

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    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.....

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    29
    Beiträge
    826
    @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

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.09.2004
    Ort
    Darmstadt
    Alter
    47
    Beiträge
    166
    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:

    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]);
    Das ist allerdings Linux-C. Keine Ahnung, ob es auf dem AVR so kompiliert.

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Also mein avr-gcc (3.4) nimmt nach

    #include <stdlib.h>

    brav das itoa() ist der libc.a.

    Oder selber Hand anlegen:
    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;
        }
    }
    buf[] enthält danach den ASCII-String mit abschliessender '\0'.
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •