我尝试将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> &'
答案 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)