char向wchar的转换-MultiByteToWideChar

Posted 平凡不简单

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了char向wchar的转换-MultiByteToWideChar相关的知识,希望对你有一定的参考价值。

问题产生

使用CreateFile函数,如下:

CreateFile(lpcTheFile, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)

第一个参数是wchar类型,而我从配置文件中读入的文件路径是char类型,因此涉及到char至wchar的转换问题

 

问题解决

使用MultiByteToWideChar函数函数代码如下:

    DWORD dwPathLen = MultiByteToWideChar(CP_ACP, 0, input_path_fasta, -1, NULL, 0);
    wchar_t*lpcTheFile = new wchar_t[dwPathLen];
    MultiByteToWideChar(CP_ACP, 0, input_path_fasta, -1, lpcTheFile, dwPathLen);

讲解如下:

倒数第三个参数设为-1,倒数第二个参数设为NULL,Z=最后一个参数设为0,函数返回lpcTheFile所需的空间,即dwPathLen;

再次调用该函数,即可完成转换。

 

问题扩展

为什么需要char到wchar的转换?

char是ASCII编码,wchar是unicode编码。

"如果ANSI代码页允许在不同的计算机上不相同,甚至在单台计算机上不一样,将会导致数据崩溃。为了代码页一致性,应用程序应该使用Unicode编码,如UTF-8或者UTF-16,而不是使用特殊的代码页,除了早期标准或者数据格式化不允许使用Unicode编码。"(百度百科)

以上是关于char向wchar的转换-MultiByteToWideChar的主要内容,如果未能解决你的问题,请参考以下文章

char* 和 wchar_t* 如何互相转换

wchar_t* 到 char* 的转换问题

cc++ char*和wchar*互相转换

在 C 中将 char* 转换为 wchar*

wchar_t到QString的转换方法?

char与 wchar 之间的转换