Boost::lexical_cast类型转换

1、字符串->数值

C++代码

 1 #include <boost/lexical_cast.hpp>
 2 #include <iostream>
 3 int main()
 4 {
 5     using boost::lexical_cast;
 6     int a = lexical_cast<int>("123");
 7     double b = lexical_cast<double>("123.12");
 8     std::cout<<a<<std::endl
 9     std::cout<<b<<std::endl;
10     return 0;
11 }

2、数值->字符串

C++代码

 1 #include <boost/lexical_cast.hpp>
 2 #include <string>
 3 #include <iostream>
 4 int main()
 5 {
 6     using std::string;
 7     const double d = 123.12;
 8     string s = boost::lexical_cast<string>(d);
 9     std::cout<<s<<std::endl;
10     return 0;
11 }

3、异常

  如果转换发生了意外,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中需要对其进行捕捉。

C++代码

 1 #include <boost/lexical_cast.hpp>
 2 #include <iostream>
 3 int main()
 4 {
 5     using std::cout;
 6     using std::endl;
 7     int i;
 8     try
 9     {
10         i = boost::lexical_cast<int>("xyz");
11     }
12     catch(boost::bad_lexical_cast& e)
13     {
14         cout<<e.what()<<endl;
15         return 1;
16     }
17     cout<<i<<endl;
18     return 0;
19 } 

  显然“xyz”并不能转换为一个int类型的数值,于是抛出异常,捕捉后输出“bad lexical cast: source type value could not be interpreted as target”这样的信息。

4、注意事项

  lexical_cast依赖于字符流std::stringstream,其原理相当简单:把源类型读入到字符流中,再写到目标类型中,就大功告成。

时间: 2024-10-29 19:07:15

Boost::lexical_cast类型转换的相关文章

boost.lexical_cast 学习

1,字符串 到 数值类型的转换 2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template<typename Target, typename Source>     Target lexical_cast(Source arg); lexical_cast 是依赖于字符串流 std::stringstream 的,其原理也是相当的简单:把源类型 (Source) 读入到字符流中,再写到目标类型 (Target) 中.但这里同时也带来了

Boost::Lexical_cast 的使用

1.C++代码 #include <boost/lexical_cast.hpp> #include <iostream> int main() { using boost::lexical_cast; int a = lexical_cast<int>("123"); double b = lexical_cast<double>("123.12"); std::cout<<a<<std::e

用boost::lexical_cast进行数值转换

在STL库中,我们可以通过stringstream来实现字符串和数字间的转换: int i = 0;    stringstream ss; ss << "123";    ss >> i; 但stringstream是没有错误检查的功能,例如对如如下代码,会将i给赋值为12. ss << "12.3";    ss >> i; 甚至连这样的代码都能正常运行: ss << "hello world

boost::lexical_cast

boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"123"转换成整数123,代码如下: string s = "123"; int a = lexical_cast<int>(s); 这种方法非常简单,笔者强烈建议大家忘掉std诸多的函数,直接使用boost:: lexical_cast.如果转换发生了意外,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中

boost::lexical_cast常见用法详解之万能转换

提示: 虽然在c中可是使用类似于atoi之类的函数对字符串转换成整型,但是我们在这儿还是推荐使用这个函数 如果转换发生了错误,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中需要对其进行捕捉. 下面是程序示例: #include <iostream> #include <boost/lexical_cast.hpp> using namespace std; using namespace boost; int main() { string s

boost之lexical_cast

第一次翻译,虽然是个很简单的函数介绍... 文件boost/lexical_cast.hpp中定义了此函数: [cpp] view plain copy namespace boost { class bad_lexical_cast; template<typename Target, typename Source> Target lexical_cast(const Source& arg); template <typename Target> Target lex

c++11实现一个简单的lexical_cast

boost中有一个lexical_cast可以用统一的方式来做基本类型之间的转换,比如字符串到数字,数字到字符串,bool和字符串及数字之间的相互转换.boost::lexical_cast的用法比较简单: #include <boost/lexical_cast.hpp> #include <iostream> #include <string> #define ERROR_LEXICAL_CAST 1 int main() { using boost::lexica

C++ 中int,char,string,CString类型转换

1. c++中string到int的转换 1) 在C标准库里面,使用atoi: #include <cstdlib> #include <string> std::string text = "152"; int number = std::atoi( text.c_str() ); if (errno == ERANGE) //可能是std::errno { //number可能由于过大或过小而不能完全存储 } else if (errno == ????)

boost常用库对应的含头文件

类型转换: lexical_cast 头文件: #include <boost/lexical_cast.hpp> using namespace boost; 代码: string send_str;   double i =3.1415926535897932;   send_str = lexical_cast<string>(i++).c_str();