Как вставить переменную char без знака в std :: string? - PullRequest
2 голосов
/ 23 ноября 2011

Я пытаюсь включить беззнаковую переменную 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 ]

4 голосов
/ 23 ноября 2011

Почему вы используете unsigned char* в первую очередь?

В любом случае, если SrvName завершен нулем, вы можете сделать:

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

Или, если вы знаете длину SrvName, вы можете сделать:

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

EDIT:

После прочтения вашего нового комментария похоже, что на самом деле вам нужно преобразовать числа в массиве в строку, представляющую 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 += ".";
    }
}
3 голосов
/ 23 ноября 2011

Ваша проблема - 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)

0 голосов
/ 23 ноября 2011

Вы можете использовать m_sSMTPSrvName.append(SrvName) или m_sSMTPSrvName.assign(SrvName), в зависимости от желаемого поведения. Имейте в виду, у вас должны быть проблемы с вашим первоначальным подходом, так что я не уверен , что это решит вашу проблему.

Справочные документы здесь и здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...