2014-05-23 23 views
0

LPBYTE를 char * 또는 string으로 변환하려면 어떻게해야합니까? 특히 EnumPrinterDataEx()를 호출하고 pData를 가져 와서 변환하려고합니다. wcstombs()를 사용하여 변환하려고하면 pData의 첫 번째 문자 만 제공됩니다. 그러나 저는 어떻게 변환이 일반적으로 이루어질 수 있는지 알고 싶었습니다.LPBYTE를 C *에서 char */string으로 변환하는 방법은 무엇입니까?

감사

편집 : 이 pData의를받은 후, 나는 LPWSTR의 새 변수를 만든 다음 wcstombs를 사용하여 문자 *이 점을 변환하고, 모든 것이 잘 작동했다. 감사!

+0

음,이 데이터의 인코딩에 따라 달라집니다! UTF-8인지 아니면 UTF-16인지 또는 더 밀교적인 것이 있는지 추측하기 위해 약간의 문자열 스니핑을해야 할 것입니다. – Cameron

답변

0

이 ANSI 또는 유니 코드 널 (null) 종료 문자열 (EnumPrinterDataEx 기능 버전에 따라) 것보다 문자열 pData의 포인트는 경우 - 그래서 당신은 단순히 캐스팅 할 수 있습니다

(char*)pData; 
(LPTSTR)pData; 
+0

답장을 보내 주셔서 감사합니다. 두 가지 방법을 시도했지만 (char *)은 첫 번째 문자 만 나타냅니다. (LPTSTR)은 약간의 가비지 값을 주지만 가비지가 아닐지도 모르지만 그게 뭔지 전혀 모른다. –

+0

pData가 문자열을 가리키고 있습니까? pData가 가리키는 메모리를 볼 수 있습니까? (char *) pData [0], (char *) pData [1] ...의 값은 무엇입니까? (wchar_t *) pData도보십시오. – VitaliyG

+0

(char *) pData [0], (char *) pData [2] ..에 충돌합니다. 그리고 (wchar_t *) pData가 가비지 값을 반환합니다. wprintf()를 수행 할 때 pData의 실제 값은 "AB1CD-E2FGH"형식입니다. –

0

당신의 문자열이 다되지 것 같다 -byte이므로 넓은 문자열을 사용할 수 있습니다. 일반적인 기능으로 조작하는 대신 wide 버전 인 wcslen을 사용하십시오.

char*로 변환이 필요한 경우, 다음과 같은 wcstombs를 사용

#include <cstdlib> 

size_t len = wcslen(input) * 2 + 1; 
char * target = new char[len]; 
memset(target, 0, len); 
if (wcstombs(target, input, len) == len) target[len - 1] = '\0';