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