Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将std::wstring转换为c+中的const*char+; STD::WScGe> >代码> const *char < /c> > C++ > _C++ - Fatal编程技术网

将std::wstring转换为c+中的const*char+; STD::WScGe> >代码> const *char < /c> > C++ >

将std::wstring转换为c+中的const*char+; STD::WScGe> >代码> const *char < /c> > C++ > ,c++,C++,,不能这样做。code>std::wstring表示一个宽(Unicode)字符字符串,而本例中的char*是一个ASCII字符字符串。必须进行从Unicode到ASCII的代码页转换 要进行转换,可以使用标准库函数,例如,或Windows函数 更新了以包含评论中的信息,感谢您指出。您可以使用c\u str成员函数将std::wstring转换为const wchar\u t*: std::wstring wStr; const wchar_t *str = wStr.c_str(); 但是,

,不能这样做。code>std::wstring表示一个宽(Unicode)字符字符串,而本例中的
char*
是一个ASCII字符字符串。必须进行从Unicode到ASCII的代码页转换

要进行转换,可以使用标准库函数,例如,或Windows函数


更新了以包含评论中的信息,感谢您指出。

您可以使用
c\u str
成员函数将
std::wstring
转换为
const wchar\u t*

std::wstring wStr;
const wchar_t *str = wStr.c_str();
但是,转换为
常量char*
不是自然的:它需要额外调用,例如:

#包括
// ...
std::wstring wStr;
常量wchar_t*input=wStr.c_str();
//计数所需的缓冲区大小(加上一个空终止符)。
大小大小=(wcslen(输入)+1)*sizeof(wchar\u t);
字符*缓冲区=新字符[大小];
#ifdef_uustdc_LIB_EXT1__
//只有在定义了uuu STDC_LIB_EXT1_uuuuuu时,才能保证wcstombs可用
大小\u t转换大小;
std::wcstombss(&convertedSize,buffer,size,input,size);
#否则
std::wcstombs(缓冲区、输入、大小);
#恩迪夫
/*使用“buffer”变量中存储的字符串*/
//可用分配内存:
删除缓冲区;

有很多方法。哪一个适合你取决于你没有提供的很多事实。您希望结果采用哪种编码?您使用的是什么平台/编码转换库?哪个操作系统?至少在Windows上,您应该很少这样做,例如,如果您想将UTF-8字符串写入文件,则必须读取“”这一内容!标准库处理这个问题。例如,请参见
wcrtomb
wcsrtombs
。@Yossarian:标准库函数的问题在于,标准没有定义在
wcstombs
中使用的宽字符集,也没有定义多字节字符集。如果需要以特定编码(如UTF-8)获取字符串,则必须自己编写转换,或者使用特定于平台的扩展(如WideChartMultiByte)std::string可以通过UTF-8包含unicode,并且std::wstring未与UTF-16/UTF-32结合。所以这是一个非常误导的答案。你能给出一个完整的例子,包括wcstombs吗?我正试图按照您建议的方式解决这个问题。当wstring是wStr时:
const wchar_t*str=wStr.c_str();尺寸=wcslen(str)*2+2;char*StartPoint=新字符[大小];大小(c)大小;;wcstombs_s(&c_大小、起始点、大小、str、大小)
@arielhad为什么在尺寸定义的末尾加上2?此外,这个大小的“公式”假设char是8位的,wchar__t是16位的,不是吗?我认为最好是通过调用sizeof()编写它,因为它不一定适用于所有平台。