char*
형식의 문자열이 있는데이 문자열을 wchar_t*
으로 변환하여 Windows 기능으로 전달하려고합니다.char 문자열을 wchar_t 문자열로 변환하려면 어떻게해야합니까?
7
A
답변
13
이 작은 기능이 도움이됩니까? 또한
#include <cstdlib>
int mbstowcs(wchar_t *out, const char *in, size_t size);
는 MultiByteToWideChar API 호출, 예를 들어, C 런타임 라이브러리에 대한 링크를 사용하지 않는 경우 C++ reference
8
를 참조하십시오
const size_t WCHARBUF = 100;
const char s[] = "HELLO";
wchar_t wszDest[WCHARBUF];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szSource, -1, wszDest, WCHARBUF);
2
윈도우 SDK는이 개 기능을 지정합니다 문자열을 와이드 문자 세트에서 또는 와이드 문자 세트로 변환하기위한 kernel32.lib. 그것들은 MultiByteToWideChar()
과 WideCharToMultiByte()
입니다.
제안하는 함수 이름과 달리 문자열에 반드시 멀티 바이트 문자 집합이 사용되는 것은 아니지만 간단한 ANSI 문자열이 될 수 있습니다. 또한 이러한 함수는 UTF-7 및 UTF-8을 멀티 바이트 문자 세트로 인식합니다. 넓은 char 문자 세트는 항상 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 *를 char *로 변환하려면 어떻게해야합니까?
- 2. char 대 wchar_t
- 3. 문자열을 ZZ 번호로 변환하려면 어떻게해야합니까?
- 4. 이 sql 문자열을 ibatis sql 문자열로 변환하려면 어떻게해야합니까?
- 5. MD5 16 진수 문자열을 64 진수 MD5 문자열로 변환하려면 어떻게해야합니까?
- 6. 유니 코드 경로를 C 문자열로 변환하려면 어떻게해야합니까?
- 7. WCHAR *을 일반 문자열로 변환하려면 어떻게해야합니까?
- 8. C++ 문자열을 .NET String ^으로 변환하려면 어떻게해야합니까?
- 9. char 문자열을 std 문자열로 변환하는 방법
- 10. .NET에서 문자열을 datetime으로 변환하려면 어떻게해야합니까?
- 11. 문자열을 줄 바꾸기로 변환하려면 어떻게해야합니까?
- 12. System :: String을 unsigned char *로 변환하려면 어떻게해야합니까?
- 13. 문자열을 유니 코드 문자로 변환하려면 어떻게해야합니까?
- 14. JSON 문자열을 자바 스크립트의 함수로 변환하려면 어떻게해야합니까?
- 15. wchar_t **를 char **로 변환하는 방법은 무엇입니까?
- 16. double을 C++에서 문자열로 변환하려면 어떻게해야합니까?
- 17. 해시를 Ruby 1.9의 JSON 문자열로 변환하려면 어떻게해야합니까?
- 18. 유니 코드를 파이썬 수준의 문자열로 변환하려면 어떻게해야합니까?
- 19. 자바를 사용하여 이미지를 base64 문자열로 변환하려면 어떻게해야합니까?
- 20. Liquid에서 타임 스탬프를 문자열로 변환하려면 어떻게해야합니까?
- 21. sbyte []를 base64 문자열로 변환하려면 어떻게해야합니까?
- 22. 이 문자열을 JSON 객체로 변환하려면 어떻게해야합니까?
- 23. PowerShell에서 일련의 문자열을 효율적으로 변환하려면 어떻게해야합니까?
- 24. 이 문자열을 다시 배열로 변환하려면 어떻게해야합니까?
- 25. 문자열을 int 또는 float로 변환하려면 어떻게해야합니까?
- 26. Visual Studio에서 코드 문자열을 대문자로 변환하려면 어떻게해야합니까?
- 27. 임의의 문자열을 CLS 준수 이름으로 변환하려면 어떻게해야합니까?
- 28. 파이썬에서 문자열을 "명령"으로 변환하려면 어떻게해야합니까?
- 29. Perl을 사용하여 문자열을 float로 변환하려면 어떻게해야합니까?
- 30. 파이썬 문자열을 ucs2 16 진수로 변환하려면 어떻게해야합니까?
대부분의 Windows 기능은 실제로 두 개의 풍미하는 "A 와서 W "버전. 예 : MessageBoxA/MessageBoxW, "MessageBox"매크로 중 하나를 참조하십시오. 그러나 명시적인'MessageBoxA' 이름을 사용하면 프로젝트 설정과 관계없이'char *'를 전달할 수 있습니다. – MSalters