2011-01-28 11 views
9

vorrei convertire una stringa char* in una stringa wchar* in C.Converti char * a * WCHAR in C

ho trovato molte risposte, ma la maggior parte di loro sono per C++. Potresti aiutarmi?

Grazie.

+2

Qual è la codifica originale nella '' char *? UTF8? ANSI? Qual è il 'sizeof (wchar)' sul tuo sistema e su quale codifica si basa? UCS-2 (16 bit)? UCS-4 (32 bit)? – Benoit

+0

@Benoit: Whoa ... pensavo che 'sizeof (wchar)' era sempre 2, no? – Mehrdad

+0

@Mehrdad: non è necessariamente 2. È definito dall'implementazione. Se si programma su Windows, ha una dimensione di due byte e detiene UTF-16, con doppio wchar_t per le coppie di surrogati. – Benoit

risposta

3

setlocale() seguito da mbstowcs().

+0

Questo è OK finché l'input è una stringa ANSI. – Benoit

+0

@Benoit: Sì, c'è ovviamente più nella conversione delle stringhe che nel chiamare una singola funzione. Ma non ho dato alcun dettaglio dal momento che penso che questo sia tutto ciò che l'OP sta cercando ... – Mehrdad

+0

L'imputazione proviene da LdapDirectory, quindi immagino sia un UTF8? – Crupuk

14

Prova swprintf con la bandiera %hs.

Esempio:

wchar_t ws[100]; 
swprintf(ws, 100, L"%hs", "ansi string"); 
+0

ci proverò questa sera, per ora non ho accesso a una shell. Grazie – Crupuk

+0

@NickDandoulakis Penso che questa risposta potrebbe essere molto utile, tuttavia ho scoperto che swprintf potrebbe avere 2 interfacce possibili, potresti per favore dare un'occhiata a questa domanda? http://stackoverflow.com/q/17716763/2436175 – Antonio

+0

@Antonio l'interfaccia che richiede la lunghezza del buffer è quella portatile. –

-1

Se vi capita di avere l'availiable API di Windows, la funzione di conversione MultiByteToWideChar offre alcuni conversione di stringhe configurabile da diverse codifiche UTF-16. Questo potrebbe essere più appropriato se non ti interessa troppo della portabilità e non vuoi capire esattamente quali sono le implicazioni delle diverse impostazioni locali per la convergenza delle stringhe.

1

quello che stai cercando è

mbstowcs 

funziona esattamente come la funzione di copia da char * a char *

ma in questo caso si sta salvando in un wchar_t *

-2

se al momento hai caratteri ANSI. basta inserire uno 0 ('\ 0') prima di ogni carattere e gettarli su wchar_t *.