¿Alguien puede publicar un código simple que convierta,
System::String^
A,
C ++ std::string
Es decir, solo quiero asignar el valor de,
String^ originalString;
A,
std::string newString;
string
c++-cli
managed-c++
sivabudh
fuente
fuente
Puede hacer esto fácilmente de la siguiente manera
fuente
Esto funcionó para mí:
fuente
Aquí hay algunas rutinas de conversión que escribí hace muchos años para un proyecto c ++ / cli, aún deberían funcionar.
fuente
Pasé horas tratando de convertir un valor ToString de listbox de Windows Form a una cadena estándar para poder usarlo con fstream para generar un archivo txt. Mi Visual Studio no venía con archivos de encabezado marshal que varias respuestas que encontré decían usar. Después de tanto ensayo y error, finalmente encontré una solución al problema que solo usa System :: Runtime :: InteropServices:
Y aquí está la página de MSDN con el ejemplo: http://msdn.microsoft.com/en-us/library/1b4az623(v=vs.80).aspx
Sé que es una solución bastante simple, pero esto me tomó HORAS de resolución de problemas y visitar varios foros para finalmente encontrar algo que funcionó.
fuente
Encontré una manera fácil de obtener un std :: string de un String ^ es usar sprintf ().
¡No es necesario llamar a las funciones Marshal!
ACTUALIZACIÓN Gracias a Eric, modifiqué el código de muestra para verificar el tamaño de la cadena de entrada para evitar el desbordamiento del búfer.
fuente
C # usa el formato UTF16 para sus cadenas.
Por lo tanto, además de convertir los tipos, también debe ser consciente del formato real de la cadena.
Al compilar para el conjunto de caracteres de varios bytes, Visual Studio y la API de Win asumen UTF8 (en realidad, la codificación de Windows es Windows-28591 ).
Al compilar para el juego de caracteres Unicode, Visual Studio y la API de Win asumen UTF16.
Por lo tanto, también debe convertir la cadena de formato UTF16 a UTF8, y no solo convertirla a std :: string.
Esto será necesario cuando trabaje con formatos de varios caracteres como algunos idiomas no latinos.
La idea es decidir que
std::wstring
siempre representa UTF16 .Y
std::string
siempre representa UTF8 .Esto no es impuesto por el compilador, es más una buena política.
O tenerlo en una sintaxis más compacta:
fuente
Me gusta alejarme del alguacil.
Me parece mucho más limpio y rápido. No hay necesidad de preocuparse por crear y eliminar un contexto.
fuente
// Usé VS2012 para escribir el siguiente código: convert_system_string a Standard_Sting
fuente