1. Andmetüüpide olulisus C-keeles
C-keeles mõjutavad andmetüübid oluliselt programmi täpsust ja jõudlust. char
-tüüpi ja int
-tüüpi kasutatakse sageli põhiliste andmetüüpidena ning sageli tekib vajadus nende omavaheliseks teisendamiseks. Selles artiklis selgitatakse, kuidas teisendada char
-tüüpi ja int
-tüüpi ning millistele punktidele tuleks tähelepanu pöörata.
Teisenduse üldised kasutusviisid
Programmeerimisel on char
– ja int
-tüüpide omavaheline teisendamine kasulik näiteks juhul, kui soovitakse käsitleda tähemärke ning nendele vastavaid numbrilisi väärtusi või säästa mälumahtu. Näiteks saab char
-tüübist saadud ASCII-koodi teisendada int
-tüüpi ja kasutada arvutustes. Samuti on vaja teisendamist siis, kui char
-tüüpi sisestatud väärtust soovitakse töödelda arvuna.
2. char-tüübi teisendamine int-tüübiks
C-keeles tehakse char
-tüübi teisendamine int
-tüübiks tüübikastingu abil. Nii saab char
-tüüpi väärtusi käsitleda täisarvudena.
Põhiline teisendusviis
char
-tüüpi väärtuse int
-tüübiks teisendamiseks kasutatakse lihtsat tüübi konverteerimist (cast).
#include <stdio.h>
int main() {
char character = 'A'; // 'A' ASCII-kood on 65
int intValue = (int)character; // char -> int cast
printf("Tähemärgi %c ASCII-kood on %d.\n", character, intValue);
return 0;
}
Selles programmis teisendatakse tähemärk 'A'
täisarvuks ning tulemus prinditakse välja – tulemuseks on 65
.
Märgiga ja märkideta char-tüüp
C-keeles on olemas nii märgiga (signed char
) kui märkideta (unsigned char
) char-tüüp. Märgiga char
võib olla negatiivne, märkideta char
väärtused on 0 kuni 255. char
-tüüpi int
-tüübiks teisendamisel tuleb sellele erinevusele tähelepanu pöörata. Näiteid mõlemast teisendusest:
#include <stdio.h>
int main() {
unsigned char uChar = 200; // märkideta char
int intValue = (int)uChar;
printf("Märkideta char väärtus %u teisendatuna int-tüübiks on %d.\n", uChar, intValue);
return 0;
}
Selles näites teisendatakse märkideta char
väärtus 200 int
-tüübiks ning tulemus jääb samuti 200. Märgiga puhul võib tulemus sõltuvalt väärtusest muutuda, seega tuleb alati olla teadlik tüüpide erinevustest.

3. int-tüübi teisendamine char-tüübiks
int
-tüübist char
-tüübiks teisendamine tähendab, et suurem arvutüüp teisendatakse väiksemaks. Kui int
-tüüpi väärtus ületab char
-tüübi vahemiku, võib osa andmetest kaotsi minna, mistõttu tuleb olla ettevaatlik.
Teisendusviisid ja ettevaatusabinõud
Kui int
-tüüpi väärtus teisendatakse char
-tüübiks, võivad vahemikust väljaspool olevad väärtused anda ootamatuid tulemusi.
#include <stdio.h>
int main() {
int number = 300; // väärtus väljaspool char vahemikku
char character = (char)number; // andmekadu
printf("Täisarvu %d teisendamine char-tüübiks annab märgi '%c'.\n", number, character);
return 0;
}
Selles programmis teisendatakse 300
char
-tüübiks ning tulemuseks võib olla ootamatu sümbol. Seetõttu tuleb alati arvestada char
-tüübi vahemikuga.
4. Stringi teisendamine arvuks
C-keeles on sagedane vajadus teisendada string (tekst) täisarvuks, näiteks kasutaja sisendi töötlemisel. Selleks sobivad hästi funktsioonid atoi
ja strtol
.
Teisendamine atoi funktsiooniga
atoi
-funktsiooniga saab stringi hõlpsalt teisendada täisarvuks, kuid sellel meetodil on piiratud veakontroll.
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "1234";
int number = atoi(str); // string -> int
printf("Stringi %s teisendamine täisarvuks annab %d.\n", str, number);
return 0;
}
Selles programmis teisendatakse string "1234"
täisarvuks 1234
, kuid võimalike vigade korral ei anta teada.
Turvaline teisendamine strtol-funktsiooniga
strtol
-funktsioon võimaldab teisendada stringi täisarvuks koos vigade kontrolliga, mis muudab kasutamise turvalisemaks.
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "1234";
char *endptr;
long int number = strtol(str, &endptr, 10); // ohutu teisendamine
if (*endptr != '\0') {
printf("Teisendamine ebaõnnestus.\n");
} else {
printf("Stringi %s teisendamine täisarvuks annab %ld.\n", str, number);
}
return 0;
}
Selles koodis kuvatakse veateade juhul, kui teisendamine ebaõnnestub. Nii saab stringi turvaliselt arvuks teisendada.
5. char- ja int-tüüpide praktilised kasutusnäited
Lõpetuseks vaatame, kuidas char
– ja int
-tüüpe saab koos rakendada praktilistes olukordades.
Segaarvutused char- ja int-tüübiga
Järgmine programm demonstreerib, kuidas char
– ja int
-tüüpe saab koos kasutada – tähemärgi ja arvu abil luuakse uus märk.
#include <stdio.h>
int main() {
char ch = 'a';
int num = 3;
char result = ch + num; // 'a' ASCII väärtusele lisatakse 3
printf("Tähemärgile %c liidetud %d annab tähemärgi '%c'.\n", ch, num, result);
return 0;
}
Selles programmis liidetakse 'a'
ASCII-koodile 3 ning tulemuseks on 'd'
. See näitab, kui lihtsalt saab char
– ja int
-tüüpe koos kasutada.