如何在std::string中插入无符号char*变量

How to insert unsigned char* variable into std::string?

本文关键字:无符号 char 变量 插入 string std      更新时间:2023-10-16

我尝试在std::string中包含无符号字符变量。它抛出编译时错误。

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> &'

为什么首先使用unsigned char* ?

无论如何,如果SrvName以null结尾,您可以这样做:

    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 += ".";
    }
}

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

如果你坚持它是unsigned char*,那么转换它。
m_sSMTPSrvName.insert(0, (char*)SrvName);

在任何情况下,如果SrvName的值是207.45.255.45,你应该把它改成char*
您可能会混淆整型值207和字符串值207。

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

您可以使用m_sSMTPSrvName.append(SrvName)m_sSMTPSrvName.assign(SrvName),这取决于所需的行为。请注意,你原来的方法也会遇到麻烦,所以我不确定这个是否能解决你的问题。

参考文档在这里和这里。