2013-05-25 2 views
1

У меня есть строка, содержащая порт, когда я пытаюсь создать TCP конечную точку, мне нужно его значение в беззнаковое короткоеКак преобразовать строку в unsigned short, используя boost lexical cast?

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

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

+1

Это работает для меня. Что содержит 'to_port'? – Mankarse

+0

, например. «8004» или любой номер порта –

+0

Этот [этот пример] (http://coliru.stacked-crooked.com/view?id=5318113dc6ceca259cc3ec1af87cd54c-e54ee7a04e4b807da0930236d4cc94dc) не работает для вас? – Mankarse

ответ

5

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

#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? Вы уверены, что он правильно инициализирован и по-прежнему находится в области видимости при использовании (например, нет задействованных времен, никаких оборванных указателей)?

Смежные вопросы