2013-01-18 4 views
2

Je sais qu'il est question simple, mais je l'ai essayé tant d'approches, dans tous je perds des données, des données de texte, et non celles de fuite 0 après chaque octet de. J'ai converti CString à wchar_t en utilisant GetBuffer(0), toujours pas de chance. Je ne peux pas obtenir un bon LPBYTE.C++ convertir unicode CString ou wchar_t à LPBYTE

À la fin, j'ai besoin d'être const LPBYTE, mais je pense qu'avec un simple casting de LPBYTE je peux obtenir const LPBYTE.

Alors pourriez-vous m'aider à convertir CString ou wchar_t en LPBYTE tableau?

Merci

+0

Peut-être essayer la macro CT2CA? – Smash

+0

Est-ce un projet UNIDOCDE ou ANSI? –

+0

projet Unicode –

Répondre

2

Si vous voulez « voir » le contenu d'un CString comme une simple séquence « brute » (tableau) de BYTE « s, vous pouvez utiliser CString::GetString() méthode pour obtenir le pointeur sur le premier caractère CString , puis jeté à const BYTE*:

CString str; 
.... 
const BYTE* pb = reinterpret_cast<const BYTE*>(str.GetString()); 

Si vous voulez « voir » une wchar_t unique comme une séquence de BYTE « s, vous pouvez prendre son adresse et à nouveau jeté à const BYTE*:

wchar_t wch; 
.... 
const BYTE* pb = reinterpret_cast<const BYTE*>(&wch); 

Mais si vous voulez convertir Unicode UTF-16 à un autre encodage comme UTF-8, vous pouvez utiliser certains conversion helpers like CW2A:

CString strUtf16; // Assume UNICODE builds (the default since VS2005) 
.... 
// Convert from UTF-16 to UTF-8 
CW2A strUtf8(strUtf16, CP_UTF8); 

// Convert (cast) to const BYTE* 
const BYTE* pb = reinterpret_cast<const BYTE*>(static_cast<const char*>(strUtf8)); 
+0

ne peut pas convertir le paramètre 1 de « const LPBYTE * » à « const LPBYTE », je dois const LPBYTE –

+0

'LPBYTE' peut être source de confusion, surtout si vous êtes un débutant; Cependant, cela signifie simplement "BYTE *". Notez que pour des raisons de clarté, j'ai utilisé 'BYTE' dans mon code, avec _explicit_ pointers (c'est-à-dire' const BYTE * ', pas' const LPBYTE * '). –

+0

a essayé avec un casting, encore une fois je perdre des données, environ la moitié des données reçues –