Преобразовать строку ASCII в длинную длинную - PullRequest
1 голос
/ 10 сентября 2011

У меня есть несколько строк информации из файла данных на C ++. Одна информация состоит из 12 символов. Как я могу преобразовать это из строки в long long (я думаю, что long long наиболее подходит для этого) без потери данных?

Ответы [ 2 ]

5 голосов
/ 10 сентября 2011

В C ++ отсутствует тип данных long long. Доступен в C99 . Тем не менее, вы можете использовать int64_t. Включите <stdint.h>.

Используйте boost::lexical_cast для преобразования строки в int64_t.

Или вы можете написать функцию преобразования самостоятельно как:

int64_t convert(const std::string &s)
{
   if(s.size() == 0 ) 
       std::runtime_error error("invalid argument");
   int64_t v = 0;
   size_t i=0;
   char sign = (s[0] == '-' || s[0] == '+') ? (++i, s[0]) : '+';
   for( ; i < s.size(); ++i)
   {
      if ( s[i] < '0' || s[i] > '9' )
          throw std::runtime_error("invalid argument");
      v = v * 10 + s[i] - '0';
   }
   return sign == '-' ? -v : v;
}

Тестовый код:

int main() {
        try{
           std::cout << convert("68768768") << std::endl;
           std::cout << convert("+68768768") << std::endl;
           std::cout << convert("-68768768") << std::endl;
           std::cout << convert("68768768x") << std::endl;
        }catch(const std::exception &e)
        {
           std::cout << e.what() << std::endl;
        }
        return 0;
}

Выход:

68768768
68768768
-68768768
invalid argument

Демо онлайн: http://ideone.com/nnSLp

0 голосов
/ 10 сентября 2011

64-битное целое число достаточно для представления любого 12-значного десятичного числа (с большим количеством свободного места). Таким образом, в зависимости от вашей платформы, может быть, что long будет достаточно. Если это так, вы можете использовать strtol или strtoul.

Если вы обнаружите, что вам нужен long long, взгляните на strtoll и strtoull.

...