2011-01-28 22 views
9

Me gustaría convertir una cadena a una cadena char*wchar* en C.Convertir char * a * WCHAR en C

he encontrado muchas respuestas, pero la mayoría de ellos son para C++. ¿Usted me podría ayudar?

Gracias.

+2

¿Cuál es la codificación original en su 'char *'? UTF8? ANSI? ¿Cuál es el 'sizeof (wchar)' en su sistema y en qué codificación se basa? UCS-2 (16 bits)? UCS-4 (32 bits)? – Benoit

+0

@Benoit: Whoa ... Pensé que 'sizeof (wchar)' siempre era 2, ¿no? – Mehrdad

+0

@Mehrdad: No es necesariamente 2. Está definido por la implementación. Si se programa en Windows, tiene un tamaño de dos bytes y contiene UTF-16, con doble wchar_t para parejas sustitutas. – Benoit

Respuesta

3

setlocale() seguido de mbstowcs().

+0

Esto está bien siempre que la entrada sea una cadena ANSI. – Benoit

+0

@Benoit: Sí, obviamente hay más en la conversión de cadenas que llamar a una sola función. Pero no le di ningún detalle, ya que creo que esto es todo lo que está buscando el OP ... – Mehrdad

+0

El problema viene de LdapDirectory, ¿entonces supongo que es un UTF8? – Crupuk

14

Pruebe swprintf con la bandera %hs.

Ejemplo:

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

lo intentaré esta noche, por ahora no tengo acceso a un caparazón. Gracias – Crupuk

+0

@NickDandoulakis Creo que esta respuesta podría ser muy útil, sin embargo descubrí que swprintf podría tener 2 interfaces posibles, ¿podría echar un vistazo? a esta pregunta? http://stackoverflow.com/q/17716763/2436175 – Antonio

+0

@Antonio la interfaz que requiere la longitud del búfer es portátil. –

-1

Si le sucede que tiene la availiable API de Windows, la función de conversión MultiByteToWideChar ofrece algunas conversión de cadenas configurable desde diferentes codificaciones UTF-16. Eso podría ser más apropiado si no te importa demasiado la portabilidad y no quieres saber exactamente cuáles son las implicaciones de las distintas configuraciones de configuración regional para la conversión de cadenas.

1

lo que estás buscando es

mbstowcs 

funciona igual que la función de copia de char * a char *

pero en este caso va a guardar en un wchar_t *

-2

si actualmente tiene caracteres ANSI. solo inserte un 0 ('\ 0') antes de cada char y vuélvalos a wchar_t *.