1.字符串转换为数值
#include <iostream>
#include <boost/lexical_cast.hpp>
int main(int argc, _TCHAR* argv[])
{
using boost::lexical_cast;
int a = lexical_cast<int>("123");
double b = lexical_cast<double>("1234.12");
std::cout << a << std::endl;
std::cout << b << std::endl;
getchar();
return 0;
}
2.数值转换为字符串
#include<boost/lexical_cast.hpp>
#include <string>
#include <iostream>
int main()
{
using std::string;
const double d = 123.12;
string s = boost::lexical_cast<string>(d);
std::cout<<s<<std::endl;
return 0;
}
3.异常
如果转换失败,则会有异常bad_lexical_cast抛出。该异常类是标准异常类bad_cast的子类。
#include<boost/lexical_cast.hpp>
#include <iostream>
int main()
{
using std::cout;
using std::endl;
int i;
try{
i = boost::lexical_cast<int>("abcd");}
catch(boost::bad_lexical_cast&e)
{
cout<<e.what()<<endl;
return1;
}
cout<<i<<endl;
return0;
}
显然“ abcd”并不能转换为一个int类型的数值,于是抛出异常,捕捉后输出“ badlexicalcast:source type value could not be interpreted as target”这样的信息。
4.注意事项
lexical_cast依赖于字符流std::stringstream,其原理相当简单:把源类型读入到字符流中,再写到目标类型中,就大功告成。
参考:
https://www.yuque.com/docs/share/341a4db6-f1bf-4786-96b0-3374683610be