c++ - 将 ASCII 字符串转换为 long long

标签 c++ long-integer string

我从 C++ 数据文件中获得了一些信息行。一项信息是 12 个字符长的数字。如何将其从字符串转换为 long long (我认为 long long 最适合此操作)而不丢失数据?

最佳答案

在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

关于c++ - 将 ASCII 字符串转换为 long long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7370887/

相关文章:

c++ - 如何区分具有相同参数的两个构造函数?

java - 随机长整型始终是最小值

java - String.getBytes ("UTF-16") 会在所有平台上返回相同的结果吗?

python - 如何在字符串列表中找到模式,将其从字符串中删除,并将其作为列表中的下一个元素插入?

c++ - 我打算调用 initializer_list 构造函数,如果存在 : why?,则预先调用复制构造函数

c++ - 使用 libsox 将音频转换为 FLAC

c++ - 无法将 "member pointer to derived class"转换为 "member pointer to base class"

java - 如果索引值超出整数,如何使用String.substring?

java - 左边为 0 的 long 值

c# - 运算符 ‘==’ 不能应用于类型 ‘char’ 和 ‘string’ 的操作数