将ASCII字符串转换为long long

时间:2011-09-10 09:39:37

标签: c++ long-integer string

我从C ++中的数据文件中获得了一些信息。一个信息是12个字符长的数字。如何在没有数据丢失的情况下将其从字符串转换为long long(我认为long long最适合这个)?

2 个答案:

答案 0 :(得分:5)

在C ++中,没有long long数据类型。 It's available in 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

答案 1 :(得分:0)

64位整数足以表示任何12位十进制数(有足够的空间)。因此,根据您的平台,可能long就足够了。如果是这种情况,您可以使用strtolstrtoul

如果您确实发现需要long long,请查看strtollstrtoull