PDA

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.

cionci
28-02-2008, 12:39
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.

cionci
28-02-2008, 15:20
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 ;)