在MFC C ++中将char数组转换为UNICODE

时间:2010-05-29 13:59:11

标签: visual-c++ unicode mfc

我正在使用以下代码从Windows中的文件夹中读取文件。但是,由于这是一个MFC应用程序,我必须将char数组转换为UNICODE。例如,如果我将路径硬编码为“C:\ images3 \ test \”,如下所示,代码可以工作。


WIN32_FIND_DATA FindFileData;  
HANDLE hFind = INVALID_HANDLE_VALUE;  
hFind = FindFirstFile(_T("C:\\images3\\test\\"), &FindFileData);

我想要的是如下工作:


char* pathOfFileType;  
hFind = FindFirstFile(_T(pathOfFileType), &FindFileData);

有人能告诉我如何解决这个问题吗? 感谢

4 个答案:

答案 0 :(得分:1)

非常感谢您的所有回复。我从这些答案中学到了很多东西,因为我也对下面发生的事情一无所知。与此同时,我设法通过使用以下代码转换为UNICODE来解决问题,而对现有代码的更改最少。

#include <atlconv.h>

USES_CONVERSION;

//An ANSI string
LPSTR lpsz_ANSI_String = pathOfFileType;

//ANSI string being converted to a UNICODE string
LPWSTR lpUnicodeStr = A2W( lpsz_ANSI_String );

hFind = FindFirstFile(lpUnicodeStr, &FindFileData); 

答案 1 :(得分:0)

您可以使用MultiByteToWideChar函数将字符串从char转换为UTF-16,但您最好直接从用户或从任何地方以Unicode的形式获取pathOfFileType你接受它,否则你可能仍然会遇到包含当前CP中未包含的字符的路径的问题。

答案 2 :(得分:0)

“因为这个MFC应用程序我 将char数组转换为UNICODE”

不是这样。如果您愿意,可以使用更改来使用多字节字符集。

在项目属性中,常规更改字符集设置为“使用多字节字符集”

现在这将有效

char* pathOfFileType;  
hFind = FindFirstFile(pathOfFileType, &FindFileData);

假设您要使用UNICODE(Visual Studio的名称用于Windows原生的UNICODE字符的2字节编码),那么您必须显式调用API的MBCS版本

char* pathOfFileType;  
hFind = FindFirstFileA(pathOfFileType, &FindFileData);

答案 3 :(得分:0)

您的问题表明了几个问题的混乱。首先,使用MFC并不意味着你必须将字符数组转换为Unicode,一个与另一个无关。此外,FindFirstFile是Win32 API,而不是MFC函数。最后,_T("abc")不一定是unicode,而_T(X)是一个宏,在多字节构建中扩展为 X ,在unicode构建中扩展为L X < / em>,创建一个宽字符文字。这样设计使您的代码可以在unciode或多字节配置中进行编译。要在声明变量时获得相同的灵活性,请使用TCHAR类型而不是charwchar_t。所以你的第二个片段看起来应该是

 TCHAR* pathOfFileType;  
 hFind = FindFirstFile(pathOfFileType, &FindFileData);

注意没有_T宏,它只适用于字符串文字,而不是标识符。