C++開発者の多くではなく、文字列を処理する方法が複数あるので、私は常に混乱します。void *をCStringに変換する方法
しかし、私はSSL_Read関数(OpenSSL)のフックを書く必要があり、これにはC++コードが必要です。私はvoid *型の長さを持つbufをCStringに変換する必要があるので、他のコードで解析することができます。
C++開発者の多くではなく、文字列を処理する方法が複数あるので、私は常に混乱します。void *をCStringに変換する方法
しかし、私はSSL_Read関数(OpenSSL)のフックを書く必要があり、これにはC++コードが必要です。私はvoid *型の長さを持つbufをCStringに変換する必要があるので、他のコードで解析することができます。
は、単純に1バイト(ASCII
または類似の)文字:
あなたはそれが終了NULL
あることがわかっている場合、あなたは、単にそれをキャストすることができます
// ASCII
CString msg = reinterpret_cast<char*>(buf);
// UNICODE
CString msg = reinterpret_cast<wchar_t*>(buf);
それが終了しNULL
されていない場合、またはあなたがその事実を知らない場合は、それをバイトごとにコピーする必要があります(CString
はassign
の機能がstd :: stringと似ています)。
CString msg;
char* str_buf = msg.GetBuffer();
char* msg_buf = reinterpret_cast<char*>(buf);
for(int x = 0; x < size; ++x)
*str_buf++ = *msg_buf++;
あなたはそれが無効バフに何があるかに依存し、reinterpret_cast
を使用して
CString msg = reinterpret_cast<wchar_t*>(buf);
これは建設的な答えではありません。入力データの形式に依存します。たとえそれがwcha_t *であっても、CStringが期待する方法でヌル終了する可能性は何ですか? – tenfour
@tenfour:以前はOpenSSLを使用していましたが、char *であり、nullで終了しています。 –
@コードモンキー:+1してください。コードは完全性のために機能しますが、私はチャドの解答に答えました。 –
を試すことができます。 char *の場合は単純なキャストとCStringのコンストラクタで十分です。それ以外の場合は、wchar_t *をchar *に変換する必要があります。バッファがヌル終端されていることを確認してください。 void*
を想定し
「void *」の予想される内容は何ですか?これは単に 'ASCII'または' UNICODE'文字のバッファですか? 'NULL'は終了していますか? – Chad
これはASCII文字で、ヌルで終わっています(OpenSSLのドキュメントは恐ろしいものです)。あなたのソリューションが両方のケースを処理するときに授与された答え。 –