Question

Je dois convertir CString au tableau Byte. Je ne sais pas pourquoi, mais tout ce que je trouve dans Internet ne fonctionne pas :( Par exemple, j'ai

CString str = _T("string");

Je l'ai essayé donc 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();

Et toujours pbBuffer ne contient que la première lettre de str

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

est 2

Mais si j'utilise const string:

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

pbBuffer contient la chaîne entière

Où est mon erreur?

Était-ce utile?

La solution

Votre CString est Unicode (deux octets par caractère) et que vous essayez de l'interpréter comme ANSI (un octet par caractère). Cela conduit à des résultats que vous ne penserez pas.

Au lieu de jeter le tampon sous-jacente en char* vous devez convertir les données. Utilisez WideCharToMultiByte () pour cela.

Autres conseils

Vous compilez probablement avec unicode. Cela signifie que votre CString contient wchar_t au lieu de char. La conversion d'un pointeur wchar_t à un pointeur char vous fait interpréter le deuxième octet du premier wchar_t comme une terminaison de chaîne (depuis par 0 pour les caractères les plus courants)

Lors de l'utilisation de Visual Studio, vous devriez toujours utiliser _T () pour déclarer les chaînes littérales et TCHAR comme type de caractère. Dans votre cas:

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

Vous obtenez le tampon, mais tous les autres octets est très probablement zéro.

Utilisez un CStringA si vous avez besoin d'une chaîne ANSI. (Mais sauter le _T () lors de l'initialisation il)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top