Jak zamienić int na char i char na int w C


(fedora24x) #1

Hej, jak wyżej :slight_smile:

int cyfra = 8;
char znak = cyfra;

char znak = "5";
int cyfra = znak;

???

I czy z tablicami jest tak samo, analogicznie?

char *znaki = "123456";
int duza_cyfra = *znaki;

Chodzi oto by zmieniac "1234" na 1234 (chara -> na inta) ??


(Ostaszewianin) #2

https://www.google.pl/search?q=int+to+char&ie=utf-8&oe=utf-8&gws_rd=cr&ei=e8maVeKKLoGqsQHFm6zoBA#q=int+to+char+c


(enedil) #3

int duza_liczba = atoi(znaki);

BTW -> char(8) != ‘8’, char(8) jest jednym z białych znaków.

BTW2 -> “8” nie jest typu char, a char*. Miałeś na myśli pewnie ‘8’.

http://www.asciitable.com/


(fedora24x) #4

 

 

Chce zmienić tylko typ zmiennej a nie wartość.

 

z (char) “8” na normalne 8 (int)


(enedil) #5

Ale “8” nie jest typu char.

Jest wskaźnikiem, więc dostaniesz w wyniku adres w pamięci:

MacBook:~ enedil$ cat char.c
#include <stdio.h>

int main()
{
	printf("%d\n", (int)"8");
	return 8;
}
MacBook:~ enedil$ clang char.c
MacBook:~ enedil$ ./a.out
113119134

(fedora24x) #6

więc aby zamienić

char znak = "9";
int cyfra = (int)znak;

a w przypadku “tablicy”, to tak

char znaki[] = "2015";
int cyfra = (int)znaki;

???


(enedil) #7

NIE NIE NIE!

Czudzysłów oznacza C-Stringa, czyli jest de iure wskaźnikiem do chara, a de facto ciągiem znaków zakończonym znakiem \0 (null).

Zatem, typem wyrażenia “8” jest char*, a nie char.

Zresztą, sam spróbuj skompilować i uruchomić Twoje snippety i zobacz, że wyniki znacznie odbiegają od Twoich oczekiwań.


(hindus) #8

No i warto pamiętać, że ‘0’ = 48, a nie 0 :wink:


(nintyfan) #9

Należy pamiętać, że char jest liczbą, a int też jest liczbą. Natomiast rzutowanie i przypisanie z int to char może spowodować utratę danych.


(fedora24x) #10

 

 

testowałe, miałeś racje :slight_smile:

 

i doszedłem do wniosku że to tak:

char znak = 8;
int cyfra = znak;   (sizeof pasuje :) )

a jak w przypadku łancuchuch?

char text[] = "123123";

int duza_liczba = (int)text;

(enedil) #11

OMG,

string jest wskaźnikiem, zatem takie rzutowanie zwróci tylko jego adres w pamięci, musisz użyć funkcji atoi.


(GioWDS) #12

Z tego co pamiętam atoi oraz itoa