Pergunta

Preciso converter CString em matriz de bytes. Não sei por que, mas tudo o que encontrei na internet não funciona :( por exemplo, eu tenho

CString str = _T("string");

Eu tenho tentado então 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();

E sempre pbbuffer contém apenas a primeira letra de str

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

é 2

Mas se eu usar a String const:

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

pbbuffer contém string inteira

Onde está meu erro?

Foi útil?

Solução

Seu cString é unicode (dois bytes por caractere) e você tenta interpretá -lo como ANSI (um byte por caractere). Isso leva a resultados que você não espera.

Em vez de lançar o buffer subjacente em char* você precisa converter os dados. Usar WindeChartomultibyte () por isso.

Outras dicas

Você provavelmente está compilando com Unicode. Isso significa que o seu CString contém wchar_t em vez de char. A conversão de um ponteiro wchar_t em um ponteiro de char faz com que você interprete o segundo byte do primeiro wchar_t como um terminador de string (já que isso é 0 para os caracteres mais comuns)

Ao usar o Visual Studio, você deve sempre usar _t () para declarar literais de string e tchar como seu tipo de personagem. No seu caso:

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

Você recebe o buffer, mas todos os outros bytes provavelmente são zero.

Use um CStringa se precisar de uma string ANSI. (Mas depois pule o _t () ao inicializá -lo)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top