如何将void *转换为CString

时间:2011-08-04 14:01:20

标签: c++

没有太多的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,以便可以通过其他代码进行解析。

3 个答案:

答案 0 :(得分:2)

假设void*只是一个字节(ASCII或类似的)字符:

如果你知道它被NULL终止了,你可以简单地投下它:

// ASCII
CString msg = reinterpret_cast<char*>(buf);

// UNICODE
CString msg = reinterpret_cast<wchar_t*>(buf);

如果它不是NULL终止,或者你不知道这个事实,那么你必须逐字节地复制它(我不相信CStringassign函数类似于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 *。确保缓冲区为空终止。