Não é possível converter CString em matriz de bytes
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?
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)