2010-06-19 14 views

Respuesta

15

De MSDN:

#include <iostream> 
#include <stdlib.h> 
#include <string> 

using namespace std; 
using namespace System; 

int main() 
{ 
    char *orig = "Hello, World!"; 
    cout << orig << " (char *)" << endl; 

    // Convert to a wchar_t* 
    size_t origsize = strlen(orig) + 1; 
    const size_t newsize = 100; 
    size_t convertedChars = 0; 
    wchar_t wcstring[newsize]; 
    mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); 
    wcscat_s(wcstring, L" (wchar_t *)"); 
    wcout << wcstring << endl; 
} 
+2

Usted debe vincular a su fuente: http://msdn.microsoft.com/en-us/library/ms235631%28VS.80%29. aspx –

+6

Gracias. Probablemente debería vincular a google también :) –

+0

Esta es la respuesta perfecta – pradeep

0

This link tiene ejemplos para muchos tipos de conversión de series, incluyendo el que usted está interesado en (busque mbstowcs_s)

0

de su ejemplo usando swprintf_s funcionaría

wchar_t wcmd[40]; 
driver = FuncGetDrive(driver); 
swprintf_s(wcmd, "%C:\\test.exe", driver); 

Tenga en cuenta que la C en %C tiene que escribirse con mayúsculas porque el controlador es un char normal y no un wchar_t.
Al pasar la cadena a swprintf_s (wcmd, "% S", cmd) también debería funcionar

+0

controlador es del tipo char – pradeep

+0

@rajivpradeep que es lo que quise decir, la C mayúscula en lugar de c es para char – josefx

20

sólo tiene que utilizar esto:

static wchar_t* charToWChar(const char* text) 
{ 
    const size_t size = strlen(text) + 1; 
    wchar_t* wText = new wchar_t[size]; 
    mbstowcs(wText, text, size); 
    return wText; 
} 

No se olvide de llamar delete [] wCharPtr en el resultado devuelto cuando estás hecho, de lo contrario, esta es una pérdida de memoria esperando a suceder si continúa llamando esto sin limpieza. O use un puntero inteligente como sugiere el comentario siguiente.

O utilizar cadenas estándar, como los siguientes:

#include <cstdlib> 
#include <cstring> 
#include <string> 

static std::wstring charToWString(const char* text) 
{ 
    const size_t size = std::strlen(text); 
    std::wstring wstr; 
    if (size > 0) { 
     wstr.resize(size); 
     std::mbstowcs(&wstr[0], text, size); 
    } 
    return wstr; 
} 
+1

Si utiliza 'std :: unique_ptr wa (nuevo wchar_t [size]) 'no tendrá que eliminarlo manualmente más tarde. –

+1

Dado que wchar_t ya tiene un administrador de recursos estándar con std :: wstring, también se puede usar en lugar de un puntero inteligente. – Robert

Cuestiones relacionadas