View Full Version : [C++] Inizializzazione variabile unsigned char*
register
28-02-2008, 12:15
Salve ragazzi,
mi sapreste dire come si inizializza una variabile unsigned char*?
ho provato a fare UCHAR* stringa= "ciao";(UCHAR è defiito mediante #define)
ma mi dice che è una conversione invalida da "const char*" ad "unsigned char*".
Se faccio UCHAR* stringa = 0; non mi da' errori.
E quando e perchè lo si usa al posto di char*?
Grazie.
Per le stringhe si usa char *, non unsigned char *...
Solitamente si usa unsigned char per contenere valori numerici (non sotto forma di stringa, ma proprio come interi).
register
28-02-2008, 12:54
Però quando gli assegno un valore diverso dallo zero mi da' problemi.
Tuttavia, ho ora visto che se gli si assegnano valori esadecimali non da' problemi, esempio:
UCHAR stringa = 0x0B;
così va bene.
kernel::panic
28-02-2008, 13:13
Però quando gli assegno un valore diverso dallo zero mi da' problemi.
Tuttavia, ho ora visto che se gli si assegnano valori esadecimali non da' problemi, esempio:
UCHAR stringa = 0x0B;
così va bene.
Sei sicuro che compili? Che compilatore usi? Il fatto è che tu stai cercando di inizializzare un puntatore ad una locazione di memoria decisa da te... potrebbe compilare se scritto così (ma non avrebbe senso comunque):
unsigned char *str = reinterpret_cast<unsigned char *>(0x0B);
Non è che intendi inizializzare una stringa Wide?
wchar_t *str = L"ciao!";
Ciao
register
28-02-2008, 13:24
Sì,
a compilare compila e anche l'exe non mi da' problemi.
Io ho fatto questa definizione: UCHAR ucCmd = 0x0B;
e non ho problemi.
Rileggendo mi sono reso conto che nel post precedente non sono stato coerente rispetto al primo.
Nel primo chiedevo di: UCHAR* stringa= "ciao";
nel secondo ho scritto solo di: UCHAR stringa = 0x0B; (non puntatore)
il fatto è che il mio compilatore (ambiente dev-c++) compila perchè le istruzioni sono queste:
UCHAR ucCmd = 0x0B;
UCHAR* ucrespdata = &ucCmd;
facendo così va bene.
Scusa...ma cos'è una stringa Wide?
Grazie comunque.
kernel::panic
28-02-2008, 13:31
Sì,
il fatto è che il mio compilatore (ambiente dev-c++) compila perchè le istruzioni sono queste:
UCHAR ucCmd = 0x0B;
UCHAR* ucrespdata = &ucCmd;
In questo caso attribuisci a ucCmd un valore numerico (non stringa) ucrespdata il puntatore alla memoria occupata da ucCmd.
Scusa...ma cos'è una stringa Wide?
http://en.wikipedia.org/wiki/Wchar_t
Ciao
register
28-02-2008, 13:51
Grazie.
Mi spieghi che senso ha inizializzare ad un valore numerico un puntatore a unsigned char ? A meno che tu non voglia operare a bassisimo livello...
Cosa ci devi fare con quel puntatore ?
register
28-02-2008, 18:45
Serve per richiamari una funzione dalla DLL di un reader (lettore di tag RFID)!
Il valore esadecimale è quello corrispondente alla funzione da chiamare.
kernel::panic
28-02-2008, 19:34
Ho capito, il valore è l'identificativo numerico del metodo...
Allora prova così (devi però conoscere il prototipo della funzione da chiamare e definirlo in MIA_FUNZ):
HINSTANCE pLib = LoadLibrary("Mia_Libreria.dll");
if(pLib) {
typedef [tipo di ritorno] (*MIA_FUNZ)([parametri]);
MIA_FUNZ hProc = (MIA_FUNZ)GetProcAddress(pLib, MAKEWORD(0x0B,0));
if(hProc ) {
hProc(......);
}
FreeLibrary(pLib);
}
Oppure più semplicemente cerca l'SDK della libreria dove troverai i .h da includere ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.