преобразование из std :: string в uint8 - PullRequest
0 голосов
/ 07 марта 2012

ссылаясь на прекрасные решения, представленные здесь, Преобразование строки в int с помощью bool / fail в C ++ ,

Я хотел бы привести std :: string к 8-битному числу (без знака или со знаком) Проблема в том, что, поскольку 8-битное число представлено в виде символа, поэтому оно анализируется неправильно
(попытка разобрать что-либо больше 1 цифры - например, 10 - не удается)

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

Использовать шаблон специализации:

template <typename T>
void Convert(const std::string& source, T& target)
{
    target = boost::lexical_cast<T>(source);
}

template <>
void Convert(const std::string& source, int8_t& target)
{
    int value = boost::lexical_cast<int>(source);

    if(value < std::numeric_limits<int8_t>::min() || value > std::numeric_limits<int8_t>::max())
    {
        //handle error
    }
    else
    {
        target = (int8_t)value;
    }
}
1 голос
/ 07 марта 2012

Разобрать число как int и затем привести его к uint8_t Вы также можете выполнять связанные проверки.

...