Как преобразовать строку в unsigned short с помощью лексического приведения Boost?

У меня есть строка, содержащая порт, когда я пытаюсь создать конечную точку tcp, мне нужно ее значение в unsigned short

  std::string to_port;
....
boost::lexical_cast<unsigned short>(to_port));

бросает исключение bad lexical cast: source type value could not be interpreted as target

1

Решение

Следующая программа работает правильно:

#include <iostream>
#include <boost/lexical_cast.hpp>

int main(int argc, const char *argv[])
{
std::string to_port("8004");
unsigned short intport = boost::lexical_cast<unsigned short>(to_port);

std::cout << intport << std::endl;
std::cout << std::hex << intport << std::endl;
return 0;
}

Но если мы изменим первую строку main в:

std::string to_port;

Мы получаем исключение:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_lexical_cast> >'
what():  bad lexical cast: source type value could not be interpreted as target
Aborted (core dumped)

Что приводит к выводу, что что-то не так с параметром, который вы передаете lexical_cast,

Можете ли вы распечатать to_port переменная, чтобы проверить его содержимое непосредственно перед lexical_cast?
Вы уверены, что он должным образом инициализирован и все еще находится в области действия при использовании (например, нет временных фильтров, нет висячих указателей)?

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]