如何将unsigned char *变量插入到std :: string中?

时间:2011-11-23 05:16:44

标签: c++ string

我尝试将unsigned char变量包含到std :: string.it中抛出编译时错误。

unsigned char* SrvName;
std::string m_sSMTPSrvName;
//srvName contains "207.45.255.45"

m_sSMTPSrvName.insert(0, SrvName);

错误

   error C2664: 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::insert(unsigned int,const std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 2 from 'const unsigned char *' to 'const std::basic_string<_Elem,_Traits,_Ax> &'

3 个答案:

答案 0 :(得分:4)

为什么首先使用unsigned char*

无论如何,如果SrvName以空值终止,您可以执行以下操作:

    std::string m_sSMTPSrvName=reinterpret_cast<const char*>(SrvName);

或者,如果你知道SrvName的长度,你可以这样做:

    std::string m_sSMTPSrvName(SrvName, SrvName + Length);

编辑:

阅读新评论后,看起来您真正想要的是将数组中的数字转换为表示IP地址的字符串。你可以这样做:

#include <sstream>

for (int i = 0; i < 4; i++)
{
    std::stringstream out;
    out << (int)SrvName[i];
    m_sSMTPSrvName += out.str();

    if (i < 3)
    {
        m_sSMTPSrvName += ".";
    }
}

答案 1 :(得分:3)

您的问题是unsigned char* SrvName。它应该是char* SrvName

如果你坚持认为它是unsigned char*,那么投下它。
m_sSMTPSrvName.insert(0, (char*)SrvName);

在任何情况下,如果SrvName的值为207.45.255.45,您应该将其设为char*
您可能会混淆int值207和字符串值207。

207字符串是3个字符,58(2),48(0),55(7)

答案 2 :(得分:0)

您可以使用m_sSMTPSrvName.append(SrvName)m_sSMTPSrvName.assign(SrvName),具体取决于所需的行为。请注意,您的原始方法也应该有问题,所以我不是某些这将解决您的问题。

参考文档herehere