Qual è il modo più semplice per convertire char [] in / da tchar [] in C / C ++ (ms)?

StackOverflow https://stackoverflow.com/questions/159442

  •  03-07-2019
  •  | 
  •  

Domanda

Sembra una domanda piuttosto softball, ma faccio sempre fatica a cercare questa funzione perché sembra che ci siano così tante variazioni riguardo al riferimento a char e tchar.

È stato utile?

Altri suggerimenti

Il modo più semplice è utilizzare le macro di conversione:

  • CW2A
  • CA2W
  • ecc ...

MSDN

TCHAR è un typedef specifico di Microsoft per char o wchar_t (un carattere largo).

La conversione in carattere dipende da quale di questi è effettivamente. Se TCHAR è in realtà un personaggio, allora puoi fare un semplice cast, ma se è veramente un wchar_t, avrai bisogno di una routine per la conversione tra set di caratteri. Vedi la funzione MultiByteToWideChar ()

Ci sono anche alcune risposte in questo post, specialmente se stai cercando una soluzione multipiattaforma:

UTF8 a / dalla conversione di caratteri generici in STL

  
    

Anche se in questa particolare situazione penso che TChar sia un personaggio ampio, dovrò fare la conversione solo se non lo è. che devo controllare in qualche modo.

  
if (sizeof(TCHAR) != sizeof(wchar_t))
{  .... }

La cosa interessante è che entrambe le dimensioni degli uguali sono costanti, il che significa che il compilatore gestirà (e rimuoverà) l'if (), e se sono uguali, rimuoverà tutto all'interno delle parentesi graffe

Ecco il codice CPP che duplica _TCHAR * argv [] in char * argn [].

http://www.wincli.com/?p=72

Se si adotta il vecchio codice su Windows, l'uso semplice definisce citato nel codice come facoltativo.

Puoi inserire condizioni nel tuo codice

ifdef _UNICODE

{// DO LIKE TCHAR IS WIDE CHAR} ALTRO {// DO LIKE TCHAR IS CHAR}

Mi rendo conto che si tratta di un vecchio thread, ma non mi ha dato il "giusto" risposta, quindi lo sto aggiungendo ora.

Il modo in cui questo sembra essere fatto ora è usare la macro TEXT. L'esempio per FindFirstFile su msdn lo sottolinea. http://msdn.microsoft .com / it-it / library / windows / desktop / aa364418% 28v = vs.85% 29.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top