PDA

Visualizza la versione completa : [C] Casting da TCHAR a BYTE


Tiime
21-04-2014, 11:32
Come posso trasformare un TCHAR in un BYTE?

MItaly
21-04-2014, 16:35
Dipende. Un TCHAR è un char o un wchar_t a seconda che compili in ANSI o Unicode; un BYTE è un unsigned char.
Ora, se compili ANSI la conversione char => unsigned char è diretta (basta un cast); se invece il TCHAR è in realtà un wchar_t la conversione dipende da diverse cose:
- vuoi fare un "dump" del wchar_t in byte? Allora devi copiare il byte alto e il byte basso del wchar_t in due BYTE separati;
- vuoi scrivere una stringa Unicode "wide" (UTF-16) in un encoding a byte singoli? Allora devi convertire in UTF-8 (per cui un wchar_t può diventare fino a tre BYTE, e se hai due wchar_t che formano una coppia surrogata li devi processare insieme per ottenere un output sensato).

Ergo: spiega meglio la situazione.

Tiime
22-04-2014, 00:04
Devo utilizzare il valore ricavato da questa funzione


TCHAR buffer[MAX_PATH];
GetModuleFileName(NULL,buffer,sizeof(buffer));

Qui


BYTE ProgramPath[]=

MItaly
22-04-2014, 02:39
Ancora non ne so nulla... Quel programPath da chi dev'essere usato? Perché è dichiarato di tipo BYTE?

oregon
22-04-2014, 09:00
Ti avevo già detto nell'altro thread che, a determinate condizioni, avresti potuto direttamente utilizzare l'array di byte ... ma neanche hai provato a farlo ...



BYTE ProgramPath[MAX_PATH];
GetModuleFileName(NULL, (LPSTR)ProgramPath, sizeof(ProgramPath));

MItaly
22-04-2014, 09:52
Nel caso, GetModuleFileNameA, ma non è una buona idea usare le API ANSI...

Tiime
22-04-2014, 19:37
Ti avevo già detto nell'altro thread che, a determinate condizioni, avresti potuto direttamente utilizzare l'array di byte ... ma neanche hai provato a farlo ...



BYTE ProgramPath[MAX_PATH];
GetModuleFileName(NULL, (LPSTR)ProgramPath, sizeof(ProgramPath));

Nell'altro Thread non c'è alcuna risposta che parli di ciò veramente...
Comunque, come posso fare un controllo tra due BYTE, per vedere per esempio se sono uguali?

oregon
22-04-2014, 21:28
Nell'altro Thread non c'è alcuna risposta che parli di ciò veramente...

Avevo risposto ma mi sa che il post si è "perso" come recentemente accade in questo forum ...


Comunque, come posso fare un controllo tra due BYTE, per vedere per esempio se sono uguali?

Questo cosa c'entra con questa discussione? Hai risolto la faccenda del cast?

Se cambiamo argomento, ci vuole un altro thread ... in ogni caso, il controllo di base tra due BYTE (o due array di BYTE?) si fa con una semplice if ... Ma devi confrontare due percorsi di file? Perché utilizzare un array di BYTE?

Tiime
22-04-2014, 21:43
Problema risolto, si può chiudere

oregon
22-04-2014, 21:56
Come hai risolto?

Loading