1

我正在尝试将 char* 字符串转换为 wchar_t*。我已经看到这个问题被问了很多次,没有解决/便携式答案/解决方案。

正如这里所建议的,swprintf 对我来说似乎是正确的解决方案,但我发现那里存在两个版本!即:

  1. http://www.cplusplus.com/reference/cwchar/swprintf/(第二个参数是字符串容量)
  2. http://msdn.microsoft.com/en-us/library/ybk95axf%28v=vs.71%29.aspx(第二个参数已经是格式字符串)

我的程序看起来像这样:

const unsigned int LOCAL_SIZE = 256;
char* myCharString = "Hello world!";
wchar_t myWCharString[LOCAL_SIZE];

在这一点上:

swprintf(myWCharString,LOCAL_SIZE,L"%hs",myCharString );

或者:

swprintf(myWCharString,L"%hs",myCharString );

并且切换编译器(mingw 4.5.2 <-> mingw 4.7.2)我确实得到了不同的版本,所以在一种情况下编译时出错!我的问题:

  1. 有没有办法知道我必须在编译时选择两个接口中的哪一个?
  2. 是否有另一种可移植的方式来转换 wchar_t* 中的 char* 字符串?例如,如有必要,我可以通过 C++ 标准库(无 C++11)

编辑

std::wstring_convert似乎不适用于我的编译器(4.5.2 和 4.7.2 都没有,包括#include <locale>

稍后我会检查是否可以使用 Boost 格式库来尝试解决这个问题...

4

1 回答 1

2

由于我可以使用 C++,而且效率不是问题,我可以使用以下内容:

std::wstring(myCharString,myCharString+strlen(myCharString)).c_str()

如果需要放入 a wchar_t*,它可能是这样的:

strcpy(myWCharString,std::wstring(myCharString,myCharString+strlen(myCharString)).c_str() );


在这里 测试

basic_string 构造函数方法的文档:

first, last
    Input iterators to the initial and final positions in a range. 
    The range used is [first,last), which includes all the characters
    between first and last, including the character pointed by first but not
    the character pointed by last.
    The function template argument InputIterator shall be an input iterator type
    that points to elements of a type convertible to charT.
    If InputIterator is an integral type, the arguments are casted to the
    proper types so that signature (5) is used instead.
于 2013-07-18T15:46:41.020 回答