Konwersja char na UINT

0

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)

0
UINT zmienna2 = (UINT)zmienna1;
0
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 :/

0

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.

0

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 };
0

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) )

0

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).

0

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.

0
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

0

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]

0

string na liczbę? czy char? a jeżeli char to w ini musze wpisac klawisz w postaci cyfrowej?

0
UINT klawisz;

if(sscanf(klawiszz,"%u",&klawisz) != 1) throw "FUCK!!!";

...
0

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)

0

Ty sobie żartujesz, czy jak? :| Co ma **sscanf **do aktywnego okna?! Zajrzyj do dokumentacji i zobacz, co ta funkcja robi.

0

Nie rozumiesz... Więc po kolei:

  1. w plik ini powiedzmy masz taki wpis klawisz=0xc0
    2)pobierasz to z tego ini w postaci stringu, a konkretniej c-stringu i masz w tablicy klawisz coś takiego: "0xc0" - po prostu siedzi tam taki napis.
    3)teraz ten napis trzeba sparsować i przerobić na liczbę - czyli z tego c-stringu wyciągnąć wartość jaka tam jest zapisana.

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

0

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.

1

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...

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1