Jak zrobić konwersję char na UINT? np.:
char zmienna1[4]=0xc0;
UINT zmienna2 = zmienna1;
Chce zachować w tej samej postaci(czyli zmienna2 ma mieć dokładnie 0xc0, a nie jakieś cyfry)
Jak zrobić konwersję char na UINT? np.:
char zmienna1[4]=0xc0;
UINT zmienna2 = zmienna1;
Chce zachować w tej samej postaci(czyli zmienna2 ma mieć dokładnie 0xc0, a nie jakieś cyfry)
UINT zmienna2 = (UINT)zmienna1;
char klawisz[4] = 0xc0;
UINT klawisz=UINT(klawiszz);
[...]
RegisterHotKey(NULL,NULL, NULL, klawisz/* <- zmienna klawisz to uint ;)*/ ))
Niestety. Po tej zamianie wartość UINT ma dziwne liczby(pewnie kod asci), przez co RegisterHotKey nie chodzi :/
Trochę szkoda, że nie napisałeś w jakim języku to potrzebujesz, ale może to Ci pomoże (nie wiem czy dobrze Cię rozumiem):
char klawisz[5] = "0xc0";
unsigned int uint;
istringstream oss(klawisz);
oss >> hex >> uint;
"Chce zachować w tej samej postaci(czyli zmienna2 ma mieć dokładnie 0xc0, a nie jakieś cyfry)" - to stwierdzenie jest trochę bez sensu. Przecież 0xc0 to jest cyfra. To jak wygląda zależy tylko od sposobu jej wypisywania, a nie jak jest zapisana w pamięci. Czy wypiszesz to szesnastkowo, ósemkowo, dziesiętnie czy jak kolwiek inaczej nie ma związku z tym jak jest przechowywana wartość w zmiennej.
Po tej zamianie wartość UINT ma dziwne liczby
Ma dziwne liczby, bo rzutujesz tablicę na UINTa, innymi słowy przypisujesz wskaźnik. Jeśli już, to tak:
UINT zmienna2 = *((UINT*)zmienna1);
Choć nie wiem, po co te akcje z tablicą...
I to popraw:
char klawisz[4] = 0xc0;
na
char klawisz[4] = { 0xc0 };
Może inaczej:
char klawiszz = 0xc0;
RegisterHotKey(NULL,NULL, NULL, klawiszz))
Jak wiadomo w RegisterHotKey zmienna klawiszz musi być UINT a nie char i chodzi mi właśnie o taką konwersję. Wszystkie powyższe odpowiedzi działały, ale gdy klikałem przycisk to nic sie nie działo i sie nie dziwie(Po zobaczeniu wartości jaką ma klawiszz(w UINT) )
No to zdecyduj się, albo tablica, albo zwykła zmienna char. W drugim przypadku wystarczy:
RegisterHotKey(NULL, NULL, NULL, (unsigned char)klawiszz);
lub po prostu zdefiniuj klawiszz jako typ unsigned.
(...) ale gdy klikałem przycisk to nic sie nie działo i sie nie dziwie(Po zobaczeniu wartości jaką ma klawiszz(w UINT) )
Akurat przykład z tablicą, który podałem, także działa (chyba że masz endiany inne).
Sprawa jest prostsza niż ci się wydaje. Wystarczy zwykłe przypisanie.
Problemem jest to, że UINT to jest liczba bez znaku, a klawisz ma wartość -64, ponieważ zmienna char może przyjmować wartości z przedziału <-128, 127>, a 0xc0 to 192.
char klawiszz[4];
GetPrivateProfileString("Ogolne","klawisz","Wartość_nie_istnieje",klawiszz,4,cd);
char klawisz=klawiszz[4]; //:P
RegisterHotKey(NULL,NULL, NULL, (unsigned char)klawisz/* <- zmienna klawisz to uint ;)*/ )
Już sie pogubiłem. Mógłby naprowadzić co robie źle? Bo program nie działa
Musisz string zamienić na liczbę. Podałem kod wyżej. Jeżeli masz tam w tym ini zapisane 0xc0 to klawisz[4] jest za małe, brakuje miejsca na null, musi być char klawisz[5]
string na liczbę? czy char? a jeżeli char to w ini musze wpisac klawisz w postaci cyfrowej?
UINT klawisz;
if(sscanf(klawiszz,"%u",&klawisz) != 1) throw "FUCK!!!";
...
0x666 - i co z tego skoro klawisz ma wartość UINT i jestem w punkcie wyjścia :P. Ja musze pobrać klawisz z pliku ini i dać go do RegisterHotKey :P. Po drugie twój sposób nie działa wtedy gdy nie mamy aktywnego okna(a właśnie dlatego użyłem RegisterHotKey). Widze że nic z tego nie wyjdzie :/ Chyba że twojego kodu nierozumiem(bardzo możliwe)
Ty sobie żartujesz, czy jak? :| Co ma **sscanf **do aktywnego okna?! Zajrzyj do dokumentacji i zobacz, co ta funkcja robi.
Nie rozumiesz... Więc po kolei:
Ten kod który podałem z istringstream jest po prostu prosty. Parsuje string i wartość jaką oznacza 0xc0 wrzuca do zmiennej unsigned int - czyli UINT
0x666 - gdy okno nie jest aktywne to skrót nie działa, natomiast RegisterHotKey działa nawet jeżeli okno nie jest aktywne. (P.S Wiem co oznacza ta funkcja:)
byku_guzio - zobacze jutro. Spróbuje od nowa. Dziś nie mam już siły.
gdy okno nie jest aktywne to skrót nie działa, natomiast RegisterHotKey działa nawet jeżeli okno nie jest aktywne
No, kur.., nie wierzę :| Co ma RegisterHotKey do kodu, który podałem? Przecież przykład ze sscanf to jeden z możliwych sposobów konwersji liczby w postaci tekstowej na postać binarną. Oczywiście, żeby to wiedzieć, trzeba było zajrzeć do dokumentacji jakiejś, ale po co...
Zwracam honor 0x666. Masz racje - nie zajrzałem do dokumentacji. Problem obszedłem inaczej: zrezygnowałem z GetPrivateProfileString, a zamiast tego dałem fstream. Wszystko już działa. Ogółem dzięki za odpowiedzi i przepraszam za mój poziom inteligencji.