Eli ongelmana on..
Kuinka muuttaa Char integeriksi ja päinvastoin.
Eli kuvitellaan että annetaan int luku = 12 ja se pitäisi saada char luku = "12"
Onko tälläinen toimenpide ylipäätään mahdollinen, jos on kuinka se tapahtuu, jos ei niin olisiko jotain vastaavia keinoja miten voisi vaihtaa char:n ja int:n paikkaa.
Toivottavasti ymmärsitte, mie en oikeen osaa sitä silleen oikeaoppisesti selittää.. :)
Koittakaa selittää sitten silleen, että tällänen aloittelijakin ymmärtää.. :)
Mutta kiitos kuitenkin kaikille vastanneille.. :)
Kuinka muuttaa Char integeriksi ja päinvastoin.
Eli kuvitellaan että annetaan int luku = 12 ja se pitäisi saada char luku = "12"
Onko tälläinen toimenpide ylipäätään mahdollinen, jos on kuinka se tapahtuu, jos ei niin olisiko jotain vastaavia keinoja miten voisi vaihtaa char:n ja int:n paikkaa.
Toivottavasti ymmärsitte, mie en oikeen osaa sitä silleen oikeaoppisesti selittää.. :)
Koittakaa selittää sitten silleen, että tällänen aloittelijakin ymmärtää.. :)
Mutta kiitos kuitenkin kaikille vastanneille.. :)
Vastaukset 4
Vanhimmat
Muuttuja castataan toisentyyppiseksi:
char cLuku;
int iLuku;
iLuku = (int)cLuku;
(ja vastaavasti cLuku = (char)iLuku; )
Otettava kuitenkin huomioon castaamalla int char:ksi että char on 8-bittinen luku, eli välillä -127, 127. Jos int-tyyppinen muuttuja on jotain muuta kuin tuolla välillä, tapahtuu ikäviä asioita. Toisinpäin ei vastaavaa ongelmaa tapahdu.
unsigned charilla saa lukualueeksi 0-255. Yleensä kannattaa laittaa kääntäessä kääntäjään päälle lisävaroitukset (esim. gcc:n optio -Wall), jotta huomaa mahdolliset castaus-ongelmat.
#include
int atoi(char s[]) {
int i, n, sign;
for (i = 0; isspace(s[i]); i )
;
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == ' ' || s[i] == '-')
i ;
for (n = 0; isdigit(s[i]); i )
n = 10 * n (s[i] - '0');
return sign * n;
}
Miksi tehdä oma atoi, kun se löytyy muutenkin.
Linuxin man atoi:
#include
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);
long long atoq(const char *nptr);
Jos int pitää laittaa char *:een, niin sitten voi kokeilla vaikka sprintf/snprintf:ää tai vastaavia.