int in char umwandeln?

  • Hallo!

    Wie wandle ich ein int in ein char, und umgekehrt in C, um? (OS Windows)
    In google findet sich eine atoi funktion, die aber nicht funktioniert. Außerdem beziehen sich die meisten google Ergebnisse auf die umwandlung innerhalb einer printf - funktion.

    lg alex

  • Ich hoffe, ich übersehe da keine Bibliotheksfunktion, mir ist aber keine bekannt.
    Du kannst ohnehin nur die Ziffern 0-9 in char umwandeln. Du könntest also den ASCII-Wert für '0' nehmen und einfach deine Zahl addieren (aufpassen, dass der int nicht größer als 9 ist), dann hast ein char.

  • danke, aber die funktion soll jedes beliebige int in ein char, und jedes beliebige char in ein int umwandeln. das kann ja nicht so schwer sein, oder? in java ist es ziemlich einfach..

  • char to int kann folgendes heißen:

    • Zwischen einer (!) Dezimaliffer und der dazugehörigen Zahl soll konvertiert werden, also '0' <-> 0, ..., '9' <-> 9. (Dafür einfach '0' addieren oder subtrahieren.)
    • Zwischen einem String (!), der eine Zahl in dezimaler (oder sonstiger) Darstellung codiert, soll konvertiert werden, also etwa "123" <-> 123. (Für die eine Richtung gibt es sprintf und Freunde, für die andere strtol und Freunde.)
    • Zwischen einem Zeichen und dem (ASCII-)Zeichencode dieses Zeichens soll umgewandelt werden, z.B. '0' <-> 48. (Dafür gibt es einfache Zuweisungen.)


    Eventuell lassen sich auch andere plausible Interpretationen von "char to int" finden. Ist deine gewünschte dabei? Falls nicht, bitte näher und mit Beispielen erläutern.

    Edit: OK, es ist also offenbar der zweite Punkt gemeint. Nimm die erwähnten Bibliotheksfunktionen; itoa ist nicht Standard und wird nicht auf allen Plattformen zur Verfügung stehen.

    *plantsch*

  • aeh, denken alle zu kompliziert oder willst du einfach nur das machen:

    int i = 42;
    char c = (char)i;
    i = (int)c;

    Sollte - teilweise - aber eh implizit vom compiler gemacht werden, dass: i = c; auch klappen sollte.

    EDIT: aso, wenn wirklcih int-> char* gemeint ist, dann mach ich es meist mit sprintf(buf, "%d", int_var); aber weiss nicht wie weniger effizient wie itoa es ist.

  • Zitat von sommeralex

    Wie wandle ich ein int in ein char, und umgekehrt in C, um? (OS Windows) In google findet sich eine atoi funktion, die aber nicht funktioniert.

    inwiefern funktioniert sie nicht? ich bin sicher, die funktionen in der c-library funktionieren alle recht gut ;)

    für integer -> string würde ich snprintf verwenden:

    C
    #include <stdlib.h>
    #include <stdio.h>
    ...
    int i=5;
    char buffer [255];
    snprintf (buffer, [color=Red](size_t)255, [/color]"%d", i);

    (eigentlich sollte man hier noch den rückgabewert prüfen, denn sonst könnte es bei zu vielen eingabezeichen sein, dass das abschließende \0 fehlt)

    für string-> integer:

    Code
    #include <stdlib.h>
    ...
    const char* szText = "2";
    int i = strtol (szText, (char*)0, 10);

    lg michi

  • Zitat von MaxAuthority

    aso, wenn wirklcih int-> char* gemeint ist, dann mach ich es meist mit sprintf(buf, "%d", int_var); aber weiss nicht wie weniger effizient wie itoa es ist.

    uje uje, solltest unbedingt snprintf verwenden!
    ahja, und der syntax ist snprintf(char * str, size_t size, const char * format, ...);, also net die size vergessen :)

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Zitat von hal

    uje uje, solltest unbedingt snprintf verwenden!
    ahja, und der syntax ist snprintf(char * str, size_t size, const char * format, ...);, also net die size vergessen :)

    danke, habs ausgebessert..

    lg michi

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!