我有一个char*
格式的字符串,并且想将它转换为wchar_t*
,以传递给Windows函数。如何将char字符串转换为wchar_t字符串?
7
A
回答
13
这个小功能有帮助吗?
#include <cstdlib>
int mbstowcs(wchar_t *out, const char *in, size_t size);
8
如果你不想对C运行时库链接,使用的MultiByteToWideChar API调用,例如:
const size_t WCHARBUF = 100;
const char s[] = "HELLO";
wchar_t wszDest[WCHARBUF];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szSource, -1, wszDest, WCHARBUF);
2
Windows SDK中指定2个功能在kernel32.lib中用于将字符串转换为宽字符集。那些是MultiByteToWideChar()
和WideCharToMultiByte()
。
请注意,与函数名称建议不同,字符串不一定使用多字节字符集,但可以是简单的ANSI字符串。请注意,这些函数将UTF-7和UTF-8理解为多字节字符集。宽字符字符集总是UTF-16。
1
schnaader的答案使用由当前的C语言环境中定义的转换,这一个使用C++语言环境界面(谁说,这是简单?)
std::wstring widen(std::string const& s, std::locale loc)
{
std::char_traits<wchar_t>::state_type state = { 0 };
typedef std::codecvt<wchar_t, char, std::char_traits<wchar_t>::state_type >
ConverterFacet;
ConverterFacet const& converter(std::use_facet<ConverterFacet>(loc));
char const* nextToRead = s.data();
wchar_t buffer[BUFSIZ];
wchar_t* nextToWrite;
std::codecvt_base::result result;
std::wstring wresult;
while ((result
= converter.in
(state,
nextToRead, s.data()+s.size(), nextToRead,
buffer, buffer+sizeof(buffer)/sizeof(*buffer), nextToWrite))
== std::codecvt_base::partial)
{
wresult.append(buffer, nextToWrite);
}
if (result == std::codecvt_base::error) {
throw std::runtime_error("Encoding error");
}
wresult.append(buffer, nextToWrite);
return wresult;
}
相关问题
- 1. 如何将wchar_t *转换为字符串?
- 2. 将char字符串转换为字符
- 3. 如何将char []转换为字符串?
- 4. 如何将char []转换为字符串&
- 5. 如何将char转换为字符串?
- 6. 如何将char转换为字符串?
- 7. 如何将char字符串转换为std字符串
- 8. 如何将wchar_t(或wchar_t *或CORBA :: WChar *)转换为字符串?
- 9. 在Java中,如何将字符串转换为char或char字符串?
- 10. 如何将字符串成char []转换
- 11. 将字符串内部的char字符串转换为lowerCase/upperCase
- 12. 的strtok():将字符串转换为char *
- 13. C++将char转换为字符串
- 14. 将字符串转换为char *
- 15. 将字符串变量转换为char
- 16. 将字符串转换为char [] - Java
- 17. 将int和char转换为字符串
- 18. 将char转换为字符串
- 19. 将字符串转换为char?
- 20. 将char转换为字符串
- 21. 将字符串转换为字符串
- 22. 将字符串转换为字符串
- 23. 将字符串转换为字符串
- 24. 如何将字符串的字符串转换为字符?
- 25. C++ Builder XE2:如何将字符串转换为wchar_t *
- 26. 字符串为char *转换为非静态字符串失败
- 27. 如何将字符串数字转换为int然后char?
- 28. 如何将字符串文字转换为字符串值
- 29. 如何将JTextField转换为字符串和字符串为JTextField?
- 30. 了解将使用哪种swprintf(或再次将char *字符串转换为wchar_t *)
大多数Windows功能实际上有两种版本,一种是“A “和”W“版本。例如。 MessageBoxA/MessageBoxW,带有一个宏“MessageBox”,指向其中一个。但是,如果您使用明确的'MessageBoxA'名称,则可以独立于项目设置传递'char *'。 – MSalters 2009-11-26 14:27:54