将char转换为wchar_t

时间:2015-04-08 21:01:10

标签: c++

在以下代码中,如何从参数(argv)读取 path1 path2 ?如何将argv[1]argv[2]转换为宽字符串格式,以便可以将它们用作_wrename参数?

int main(int argc, const char *argv[])
{
  const wchar_t path1[] = L"/tmp/a";
  const wchar_t path2[] = L"/tmp/b";
  _wrename(path1, path2);
  return 0;
}

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

std::wstring s2ws(const std::string& s) {
    int slength = (int)s.length() + 1;
    int len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); 
    std::wstring r(len, L'\0');
    MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, &r[0], len);
    r.resize(r.size() - 1);
    return r;
}

答案 1 :(得分:0)

使用mbstowcs

size_t mbstowcs (wchar_t* dest, const char* src, size_t max);

将多字节字符串转换为宽字符串。它将src指向的多字节序列转换为宽字符的等效序列(存储在dest指向的数组中),直到最大宽字符被翻译或直到多字节序列src中遇到空字符为止(它也被翻译和存储,但不计入函数返回的长度。)

如果成功翻译了最大字符数,则存储在dest中的结果字符串不会以空值终止。

此函数的行为取决于所选C语言环境的LC_CTYPE类别。