【问题标题】:Convert char to wchar_t将 char 转换为 wchar_t
【发布时间】:2015-04-08 21:01:10
【问题描述】:

在下面的代码中,我如何从 arguments(argv) 中读取 path1path2?如何将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;
}

【问题讨论】:

标签: c++


【解决方案1】:

你可以这样使用:

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;
}

【讨论】:

    【解决方案2】:

    使用mbstowcs

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

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

    如果成功翻译了 max 个字符,则存储在 dest 中的结果字符串不会以 null 结尾。

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

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2015-08-05
      • 2015-09-25
      • 2011-03-14
      相关资源
      最近更新 更多