Convertir _TCHAR * a char *
Estoy tratando de conseguiruna simple muestra de OpenCV trabajar en C ++ en Windows y mi C ++ está más que oxidado.
La muestra es bastante simple:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
if( argc != 2)
{
cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
return -1;
}
Mat image;
image = imread(argv[1], IMREAD_COLOR); // Read the file
if(! image.data ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.
imshow( "Display window", image ); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0;
}
Cuando hago una nueva aplicación de consola de C ++ simple (con ATL) en Visual Studio 2012, obtengo una plantilla diferente paramain
:
int _tmain( int argc, _TCHAR* argv[] )
Así que antes de enviar el nombre de archivo a OpenCV'simread
Función que necesito para convertir el_TCHAR*
arg[1]
a unchar*
. Usando un nombre de archivo simple, 'opencv-logo.jpg', desde la memoria en la ventana de memoria puedo ver que el _TCHAR está tomando dos bytes cada uno
o.p.e.n.c.v.-.l.o.g.o...j.p.g...
6f 00 70 00 65 00 6e 00 63 00 76 00 2d 00 6c 00 6f 00 67 00 6f 00 2e 00 6a 00 70 00 67 00 00 00
Siguiendo la recomendación de conversión enotra respuesta Estoy tratando de usarClases de conversión de cadenas ATL 7.0 y macros insertando el siguiente código:
char* filename = CT2A(argv[1]);
Pero la memoria resultante es un desastre, ciertamente no es 'opencv-logo.jpg' como una cadena ascii:
fe fe fe fe fe fe fe fe fe fe ...
þþþþþþþþþþ ...
¿Qué técnica de conversión, función o macro debo usar?
(NÓTESE BIEN.Esta Puede ser una pregunta relacionada pero no puedo ver cómo aplicarla respuesta aquí.)