int als char * ausgeben



  • Möchte ein int in einen char * umwandeln. Sozusagen die zahl als String ausgeben. Wie geht das



  • Das ist eine häufig gestellte Frage.



  • [EDIT]
    gelöscht, da falsch
    [/EDIT]

    @Bashar

    Ok, ich habe meinen Fehler gesehen.



  • AUA AUA AUA

    daishi, tu mir und vielleicht noch anderen einen Gefallen, und halt dich einfach raus wenn du mal was nicht weisst OK?



  • Das sollte jetzt funktionieren:

    #include <stdio.h>
    
    static void xxtoa (
            unsigned long val,
            char *buf,
            unsigned radix,
            int is_neg
            )
    {
            char *p;                /* pointer to traverse string */
            char *firstdig;         /* pointer to first digit */
            char temp;              /* temp char */
            unsigned digval;        /* value of digit */
    
            p = buf;
    
            if (is_neg) {
                /* negative, so output '-' and negate */
                *p++ = '-';
                val = (unsigned long)(-(long)val);
            }
    
            firstdig = p;           /* save pointer to first digit */
    
            do {
                digval = (unsigned) (val % radix);
                val /= radix;       /* get next digit */
    
                /* convert to ascii and store */
                if (digval > 9)
                    *p++ = (char) (digval - 10 + 'a');  /* a letter */
                else
                    *p++ = (char) (digval + '0');       /* a digit */
            } while (val > 0);
    
            /* We now have the digit of the number in the buffer, but in reverse
               order.  Thus we reverse them now. */
    
            *p-- = '\0';            /* terminate string; p points to last digit */
    
            do {
                temp = *p;
                *p = *firstdig;
                *firstdig = temp;   /* swap *p and *firstdig */
                --p;
                ++firstdig;         /* advance to next two digits */
            } while (firstdig < p); /* repeat until halfway */
    }
    
    /* Actual functions just call conversion helper with neg flag set correctly,
       and return pointer to buffer. */
    
    char * itoa (
            int val,
            char *buf,
            int radix
            )
    {
            if (radix == 10 && val < 0)
                xxtoa((unsigned long)val, buf, radix, 1);
            else
                xxtoa((unsigned long)(unsigned int)val, buf, radix, 0);
            return buf;
    }
    
    int main(int argc, char* argv[])
    {
    	int zzzz=15;
    	char blabla[20];
    	itoa(zzzz,blabla,10);
    	printf("%s",blabla);
    
    	return 0;
    }
    

    Ich hab mir einfach die _itoa von C++ ausgeborgt und hoffentlich alles auf C umgebogen.



  • Was soll denn das jetzt werden?

    Wenn Ataman ein int ausgeben will (was wohl gemeint war) dann geht das wohl etwas einfacher:

    int i = 24;
    printf( "Mein int = %d", i);
    

    Und wenn er das int umwandeln will braucht er das doch nicht selber programmieren.



  • und wenn man ihn ned ausgeben will, gehts auch ganz einfach ...

    int i = 24; 
    char buffer[100]; // richtig unter C ? 
    sprintf(buffer, "%d", i);
    

    // PS, nimmt man haeufig auch noch unter C++, weil die stream operationen doch ein bisserl unflexibel sind ...

    Ciao ...



  • RHBaum schrieb:

    // PS, nimmt man haeufig auch noch unter C++, weil die stream operationen doch ein bisserl unflexibel sind ...

    Huch. Das musst du mir aber mal erklären.



  • sie sind flexibler, aber umständlicher


Anmelden zum Antworten