2011-03-26 8 views

답변

8

내가 추측 :

QString str("ddddd"); 
LPCSTR lstr = str.toStdString().c_str(); 
+0

그게 전부 LPCSTR 경우 const char * – snoofkin

+2

'LPCSTR' 항상'char *'로 정의됩니다. 'UNICODE'가 정의되어 있는지에 따라'const char *'또는'const wchar_t * '에 매핑 할 수있는'LPCTSTR' (** T **에주의하십시오)과 혼동을 느낍니다. –

-5
LPCSTR == const char * 

그 다음,

LPCSTR의 = (const를 숯불 *)

qtString 유니 코드 아니다;

+0

당신은 질문을 오해했습니다! – TonyK

+0

나는 (const char *) qtString이 잘 변환된다고 생각하지 않는다. – snoofkin

+0

AFAIK LPCSTR은 TCHAR *로 정의됩니다. TCHAR은 UNICODE 설정에 따라 WCHAR 또는 CHAR로 정의됩니다. – Seba

2

QString 항상 유니 코드를 저장할 수 있습니다; LPCSTR은 유니 코드가 아닙니다. 즉, 적합하지 않은 문자를 어떻게 처리해야하는지 고려해야합니다. 이것은 "사용할 수있는 방법"질문이 아니라 설계 질문입니다.

특정 경우에는 QString 로컬 "ANSI"코드 페이지 (또는 ACP라고도 함)의 문자 만 사용할 수 있습니다. 이 경우 올바른 기능은 QString::toLocal8Bit()입니다.

또는 QString에는 Latin1 (ISO 8859-1)의 문자 만 포함될 수 있습니다. 이 경우 올바른 기능은 QString::toLatin1()입니다.

QString::toUtf8()으로 전화를 걸 수 있습니다. QString에 모든 유니 코드 문자가 포함되어 있어도 항상 유효한 바이트 배열을 생성합니다. 그러나 형식적으로는 LPCSTR을 가리킬 수 없습니다. UTF-8은 유효한 ACP 코드 페이지가 아닙니다. 아마도이 LPCSTR을 컨트롤 외부의 다른 함수로 전달하기를 원할 것입니다. 함수가 UTF-8을 기대하지 않을 가능성이 있습니다. 유니 코드가 전혀 필요 없다면 LPCWSTR이 걸릴 것입니다.

0

나는 here에서 다음과 같은 솔루션을 발견하고 나를 위해 완벽하게 작동합니다 :

void fooSub(LPSTSTR X); // this is our function :-) 

foo() 
{ 
    QString text; 
    if(sizeof(TCHAR) == 1) 
     fooSub((LPCSTR)text.toLocal8Bit().constData()); // here you have to check, how to convert, you could also use utf8(), ... 
    else 
     fooSub((LPCWSTR)text.utf16()); 
} 
관련 문제