Int-Array in Char-Array



  • Hallo,

    ich versuche gerade ein Int-Array zu durchlaufen und die einzelnen Werte in ein Char-Array zu schreiben. Anschließend soll das Char-Array via atoi() in eine Integer-Zahl gewandelt werden.

    Leider bekomme immer 0 zurückgeliefert...

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char** argv)
    {
    	int zaehler[] = { 1,2,3,4};
    	char zahl[5] = {};
    	int i,z;
    
    	for(i = 0; i<sizeof(zaehler); i++)
    	{
    		zahl[i] = (char)zaehler[i];
    	}
    	z = atoi(zahl);
    	printf("%d\n",z);
    
    	return 0;
    }
    

    Kann mir jemand einen Tipp geben?

    LG Solick



  • Ja. (char)1 ist nicht gleich '1' . Siehe auch hier.

    MfG



  • (char)1 wäre dann also ASCII-Code 1?

    Muss ich mir eine Funktion schreiben, die für jeden Integer 0-9 den ASCII-Code zurückgibt oder gibts ne elegantere Methode?

    wie wäre es mit:

    (char)zaehler[i]+48;

    LG Solick



  • solick schrieb:

    (char)1 wäre dann also ASCII-Code 1?

    Muss ich mir eine Funktion schreiben, die für jeden Integer 0-9 den ASCII-Code zurückgibt oder gibts ne elegantere Methode?

    wie wäre es mit:

    (char)zaehler[i]+48;

    LG Solick

    Ausprobieren soll helfen 😃



  • wenn du atoi nutzen willst, benutz doch vorher gleich itoa.

    mfg,
    julian



  • sorry für die späte Antwort. Habs nun hingekommen. Vielen Dank für Eure Hinweise.

    Grüße Solick



  • Eine andere Frage meinerseits, da ich kein neues Thema aufmachen will.

    Ich habe folgenden code

    int iarray[10] = { 1, 1, 1, 1, 1, 1, 1, 1 };
    char* carray = (char*) iarray;
    int i;
    for(i= 0; i < 10; i++) {
        printf("carray: %i\n", carray[i]);
    }
    /*
    AUSGABE
    
    pcnt: 1
    pcnt: 0
    pcnt: 0
    pcnt: 0
    pcnt: 1
    pcnt: 0
    pcnt: 0
    pcnt: 0
    */
    

    Wieso werden aus den 1 ern 0 ?? Ok ein integer hat 4 Byte und char 1 Byte.



  • Dann überleg' doch mal, wie eine 4-Byte '1' im Speicher aussieht:

    Byte 1   Byte 2   Byte 3   Byte 4
     ??       ??       ??       1
    

    😉

    Die Reihenfolge bei der Ausgabe (zuerst die 1) hat jetzt noch was mit Endianness (Wikipedia) zu tun, aber das Prinzip sollte ankommen.



  • Ok also zuerst liegt es im Speicher so

    int iarray[10] = { 1, 1, 1, 1, 1, 1, 1, 1 };
    
    /*
    00000000 00000000 00000000 00000001
    00000000 00000000 00000000 00000001
    00000000 00000000 00000000 00000001
    00000000 00000000 00000000 00000001
    
    00000000 00000000 00000000 00000001
    00000000 00000000 00000000 00000001
    00000000 00000000 00000000 00000001
    00000000 00000000 00000000 00000001
    */
    
    /* nach dem casten */
    char* carray = (char*) iarray;
    
    /* wird 1 byteweise ausgegeben */
    00000001
    00000000
    00000000
    00000000
    
    00000001
    00000000
    00000000
    00000000
    

Anmelden zum Antworten