문제

cstring을 바이트 어레이로 변환해야합니다. 왜 그런지 모르겠지만 인터넷에서 찾은 모든 것이 작동하지 않습니다 :( 예를 들어, 나는

CString str = _T("string");

나는 그렇게 시도하고 있었다 1)

BYTE *pbBuffer = (BYTE*)(LPCTSTR)str;

2)

BYTE *pbBuffer = new BYTE[str.GetLength()+1];
memcpy(pbBuffer, (VOID*)(LPCTSTR)StrRegID, str.GetLength());

3)

BYTE *pbBuffer = (BYTE*)str.GetString();

그리고 항상 pbbuffer 첫 번째 편지 만 포함합니다 스트리트

DWORD dwBufferLen = strlen((char *)pbBuffer)+1;

2입니다

하지만 const 문자열을 사용하는 경우 :

BYTE *pbBuffer = (BYTE*)"string";

pbbuffer 전체 문자열을 포함합니다

내 실수는 어디에 있습니까?

도움이 되었습니까?

해결책

CSTRING은 유니 코드 (문자 당 2 바이트)이며 ANSI (문자 당 1 바이트)로 해석하려고합니다. 이것은 당신이 기대하지 않는 결과로 이어집니다.

기본 버퍼를 주조하는 대신 char* 데이터를 변환해야합니다. 사용 WideChartomultibyte () 그에 대한.

다른 팁

당신은 아마도 유니 코드로 컴파일하고있을 것입니다. 이것은 당신의 cstring에 char 대신 wchar_t가 포함되어 있음을 의미합니다. WCHAR_T 포인터를 숯 포인터로 변환하면 첫 번째 WCHAR_T의 두 번째 바이트를 문자열 터미네이터로 해석하게됩니다 (가장 일반적인 문자의 경우 0이기 때문에).

Visual Studio를 사용할 때는 항상 _t ()를 사용하여 문자열 리터럴을 선언하고 TCHAR을 문자 유형으로 선언해야합니다. 귀하의 경우 :

BYTE* pBuffer = (BYTE*)(LPCTSTR)str;

버퍼를 얻지 만 다른 모든 바이트는 아마도 0 일 것입니다.

ANSI 문자열이 필요한 경우 cstringa를 사용하십시오. (그러나 초기화 할 때 _t ()를 건너 뜁니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top