如何在std::string中插入无符号char*变量
How to insert unsigned char* variable into std::string?
我尝试在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)
,这取决于所需的行为。请注意,你原来的方法也会遇到麻烦,所以我不确定这个是否能解决你的问题。
参考文档在这里和这里。
相关文章:
- 将无符号char*转换为std::istream*C++
- 通过无符号 char 别名进行对象访问,加载和存储时会发生什么?
- 将数据从 vector<unsigned char> 传输到无符号 char[]
- 将 C++ 转换为 Python 通过引用返回无符号 char*
- Vizualize无符号char *数组作为位图
- C/C++:将 char[] 转换为 int 失败,无符号 char[] 到 int 有效,为什么
- 将无符号char*缓冲区分配给字符串
- 在编译模板方面,char、有符号char或无符号char参数类型的函数重载
- 如何正确地将std::字符串转换为无符号char[]数组*.我觉得我做错了,有人给我指明了正确的方向
- 将char转换为无符号char
- 如何在python中将包含十六进制值的无符号char*数组写入文件
- 解析指向位操作数 C++ 的无符号 char 指针
- 将无符号 char[] 解析为 std::string
- 无符号char*数据作为c++或c中函数的返回类型
- 从C++字符串转换为无符号char*并返回
- 将无符号整数转换为无符号char*
- 无符号char类型变量I/O失败
- 如何在std::string中插入无符号char*变量
- 将C字符串转换为无符号char指针
- 使用memcpy()函数将字节从无符号char数组放入std::string