Frage

ich brauche CString Byte-Array zu konvertieren. Ich weiß nicht, warum, aber alles, was ich in Internet gefunden funktioniert nicht :( Zum Beispiel, ich habe

CString str = _T("string");

Ich habe versucht, so 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();

Und immer pbBuffer enthält nur Anfangsbuchstaben str

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

2

Aber wenn ich const string:

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

pbBuffer enthält ganze Reihe

Wo ist mein Fehler?

War es hilfreich?

Lösung

Ihr CString ist Unicode (zwei Bytes pro Zeichen) und Sie versuchen, es als ANSI zu interpretieren (ein Byte pro Zeichen). Dies führt zu den Ergebnissen Sie nicht erwarten.

Statt den zugrunde liegenden Puffer in char* Gießen müssen Sie die Daten konvertieren. Verwenden Sie WideCharToMultiByte () dafür.

Andere Tipps

Sie kompilieren wahrscheinlich mit Unicode. Dies bedeutet, dass Ihr CString Wchar_t statt char enthält. einen wchar_t-Zeiger auf ein char Zeiger Umwandlung bewirkt, dass Sie das zweite Byte des ersten wchar_t als String-Terminator (da diese von 0 für die häufigsten Zeichen ist) zu interpretieren

Wenn Sie Visual Studio verwenden, sollten Sie immer _T () verwenden, Stringliterale und TCHAR als Zeichentyp zu erklären. In Ihrem Fall:

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

Sie erhalten die Puffer, aber jedes andere Byte ist höchstwahrscheinlich null.

Verwenden Sie einen CStringA, wenn Sie einen ANSI-Zeichenfolge benötigen. (Aber dann überspringen Sie den _T (), wenn es zu initialisieren)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top