cstring을 바이트 어레이로 변환 할 수 없습니다
문제
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 ()를 건너 뜁니다)
제휴하지 않습니다 StackOverflow