programing

std :: string을 const wchar_t *로 변환하고 싶습니다.

firstcheck 2021. 1. 17. 10:55
반응형

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

반응형