[C++] Konwersja char na UINT

Zna ktoś sposób na taką konwersję jak w temacie? Na internecie niestety nic nie ma :frowning:

Są co najmniej 3 możliwości i nie pisz, że na necie nic nie ma bo jest pełno rozwiązań dla palącego Cię problemu. Przytoczę słowa innego użytkownika: “…google nie gryzie…”.

  1. char literka;

cin >> literka;

int x = static_cast(literka);

  1. char literka;

pobranie literki;

int x = (int)literka;

  1. int atoi(const char *nptr);

Pytanie czy chodzi Ci o uzyskanie kodu ASCII znaku czy może liczby odpowiadającej znakom cyfr ‘0’ … ‘9’?

Jeśli to pierwsze to wystarczy rzutowanie na typ liczbowy

(unsigned) zmienna_char

Jeśli to drugie wystarczy od zmiennej typu char odjąć ‘0’

zmienna_char - '0'
UINT klawisz;

	char klawiszz = 0xc0;

	klawisz = (unsigned)klawiszz;

	std::cout << klawisz << std::endl;

	std::cout << klawiszz << std::endl;

	_getch();

Co robie źle? Zmienna klawisz ma wartość 0-9, a ja chce w literkach ;p

Kubus - to na int dajesz :stuck_out_tongue_winking_eye:

Hmhmh. Wg. Mnie błąd jest w tej linijce:

char klawiszz = 0xc0;

zmienna typu char może przechowywać znak z klawiatury alfanumerycznej ale nie pseudoadres komórki z pamięci.

Dodane 18.02.2011 (Pt) 15:39

#include 


#include 


using namespace std;


int main()

{

    unsigned int klawisz;


    char klawisz2 = 'a';


    klawisz = (unsigned int)klawisz2;


    cout << klawisz << endl;


    cout << klawisz2 << endl;


    getch();


    return 0;

}

masz literkę i liczbę

Kubus_Witkacy , czy ty przynajmniej podstawy C++ znasz aby dawać rady na temat tego języka?

char x1=‘a’;

char x2=33;

char x3=055;

char x4=0x48;

char x5=52.9;

Przejdzie każda z powyższych inicjalizacji.

Mozesz troche jasniej alex ?

A co tu jaśniej, to odpowiedź na poniższą niedorzeczną krytykę twojej odpowiedzi:

Nie rozumiem tylko poco ludzie pchają się nauczać/pouczać/krytykować nie znając nawet podstaw zagadnienia.

xD ale alex źle się zrozumieliśmy. Nie chciałem Cię obrazić, a skoro tak to zrozumiałeś to przepraszam. Ja tylko chciałem się dowiedzieć jak rozwiązać swój problem. Nie kapowałem tego:

char x1='a';

char x2=33;

char x3=055;

char x4=0x48;

char x5=52.9;

Przejdzie każda z powyższych inicjalizacji.

Nie podważam Twojej wiedzy Alexie ponieważ parę razy rozwiązałeś problemy, którym nie dałem rady ale programuję w c++ od ponad roku… A te swoje pytania o podstawy to możesz w dupę wsadzić - bez obrazy ;). Sądzę Alexie, że gdybyś skompilował kod kolegi zadającego pytanie to otrzymałbyś poprawny wynik, więc nie wiem po co w ogóle osoba pytająca, pytanie zadała. Może opatrznie zrozumiałem pytanie.

BTW - chciałem koledze na prostym przykładzie wytłumaczyć jak następuję konwersja. Kolega zainicjalizował zmienną typu char ową liczbą: 0xc0. Wiesz tak z pamięci jaki znak odpowiada tej wartości liczbowej??? Wiadomo, że znakowi ‘a’ odpowiada wartość 97.Kiedy następuję konwersja z char na int otrzymujesz liczbową wartość tego co kryje się pod znakiem char. Sorki Alex za powyższe stwierdzenie i nie pytaj się czy ktoś zna podstawy ;).

Może nie do końca umiem przekazać wiedzę drugiej osobie jednak posiadam pewien zasób wiedzy ;). Poza tym umiem czytać i z tematu tego posta wynika, że pytający chciał przeprowadzić konwersję z char na uint więc moja pierwsza odpowiedź jak jak najbardziej prawidłowa. W następnym poście osoba pytająca chce uzyskać znaki z cyferek więc o co chodzi osobie pytającej ???

Nie lubie jak ktoś przeze mnie sie ktoś z kim tnie… Dobra. Dam kod, który raczej wszysztko wyjaśni.

char klawisz[5];

GetPrivateProfileString("Ogolne","klawisz","Wartość_nie_istnieje",klawiszz,5,cd);

UINT klawisz;

	klawisz = (unsigned)klawiszz;

	std::cout << klawisz << std::endl;

	std::cout << klawiszz << std::endl;

[,,,]

(RegisterHotKey(NULL,NULL, NULL, klawisz/* <- zmienna klawisz to uint ;)*/ ))

UINT klawisz=atoi(klawiszz);

Nie działa

int main()

{

char klawiszz[5];

GetPrivateProfileString("Ogolne","klawisz","Wartość_nie_istnieje",klawiszz,5,cd);

UINT klawisz=atoi(klawiszz);

   std::cout << klawisz << std::endl;

   std::cout << klawiszz << std::endl;

   _getch();

[...]

RegisterHotKey(NULL,NULL, NULL, klawisz/* <- zmienna klawisz to uint ;)*/ ))

}

Żeby nie było: w linijce RegisterHotKey gdy wpisze manualnie 0xc0, wszystko działa poprawnie, a zmienna klawiszz zawiera poprawną wartość(0xc0) :wink:

Pytałeś o konwersje, dostałeś odpowiedź, ale teraz to niezbyt rozumiem o co ci chodzi.

Może inaczej: Czy wartość UINT może mieć taką samą wartość(0xc0) jak char(0xc0). Chodzi mi o taką samą postać.

char =0xc0

UINT = char( czyli uint ma mieć 0xc0, w takiej samej postaci)

Chyba już jasne?

unsigned char tak, char nie zupełnie ponieważ 0xC0 to wartość ujemna.

Ok. Problem już rozwiązałem. Dzięki za odpowiedzi.