没有太多的C ++开发人员和处理字符串的多种方法总是让我感到困惑。
int Mine_SSL_Read(SSL* ssl, void* buf, int size)
{
int length = Real_SSL_Read(ssl, buf, size);
CString msg = ???
}
但是我需要为SSL_Read函数(OpenSSL)编写一个钩子,这需要一些C ++代码。我需要将buf类型为void *并将长度为“length”转换为CString,以便可以通过其他代码进行解析。
答案 0 :(得分:2)
假设void*
只是一个字节(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++;
答案 1 :(得分:1)
您可以尝试使用reinterpret_cast
,
CString msg = reinterpret_cast<wchar_t*>(buf);
答案 2 :(得分:0)
这取决于void buff中的内容。如果它是char *一个简单的转换和CString构造函数就足够了,否则你应该将wchar_t *转换为char *。确保缓冲区为空终止。