std :: string을 const wchar_t *로 변환하고 싶습니다.
방법이 있습니까? 내 컴퓨터는 AMD64입니다.
::std::string str;
BOOL loadU(const wchar_t* lpszPathName, int flag = 0);
내가 사용했을 때 :
loadU(&str);
VS2005 컴파일러는 다음과 같이 말합니다.
Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'
내가 어떻게 해?
std :: wstring 객체가있는 경우 c_str()
이를 호출 하여 다음을 얻을 수 있습니다 wchar_t*
.
std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();
그러나 좁은 줄에서 작업하고 있으므로 먼저 확장해야합니다. 여기에는 다양한 옵션이 있습니다. 하나는 Windows의 기본 제공 MultiByteToWideChar
루틴을 사용하는 것입니다. 그것은 당신에게 줄 것이다 LPWSTR
에 해당하는 wchar_t*
.
먼저 std :: wstring으로 변환하십시오.
std::wstring widestr = std::wstring(str.begin(), str.end());
그런 다음 C 문자열을 가져옵니다.
const wchar_t* widecstr = widestr.c_str();
이것은 ASCII 문자열에서만 작동하지만 기본 문자열이 UTF-8로 인코딩 된 경우 작동하지 않습니다. MultiByteToWideChar ()와 같은 변환 루틴을 사용하면이 시나리오가 올바르게 처리됩니다.
ATL 텍스트 변환 매크로를 사용하여 좁은 (char) 문자열을 넓은 (wchar_t) 문자열로 변환 할 수 있습니다. 예를 들어, std :: string을 변환하려면 :
#include <atlconv.h>
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);
코드 페이지를 지정할 수도 있으므로 std :: string에 UTF-8 문자가 포함되어 있으면 다음을 사용할 수 있습니다.
CA2W pszWide(str.c_str(), CP_UTF8);
매우 유용하지만 Windows 전용입니다.
Linux / Unix를 사용하는 경우 GNU C (ISO C 90에서)에 정의 된 mbstowcs () 및 wcstombs ()를 살펴보십시오.
mbs는 "Multi Bytes String"을 나타내며 기본적으로 0으로 끝나는 일반적인 C 문자열입니다.
wcs는 Wide Char String을 나타내며 wchar_t의 배열입니다.
와이드 문자에 대한 자세한 배경 정보는 여기 에서 glibc 문서를 참조하십시오 .
참조 URL : https://stackoverflow.com/questions/246806/i-want-to-convert-stdstring-into-a-const-wchar-t
'programing' 카테고리의 다른 글
onBindViewHolder가 호출되면 어떻게 작동합니까? (0) | 2021.01.17 |
---|---|
Python의 ftplib를 사용하여 이식 가능한 디렉토리 목록 가져 오기 (0) | 2021.01.17 |
URL에서 이미지를 프로그래밍 방식으로 저장하려면 어떻게합니까? (0) | 2021.01.17 |
VIM에서 CAPS LOCK 키를 매핑하는 방법은 무엇입니까? (0) | 2021.01.17 |
권한 오류로 인해 jstatd를 시작할 수 없습니다. (0) | 2021.01.17 |