首页 > 代码库 > boost库学习之 lexical_cast
boost库学习之 lexical_cast
在C中字符串转换为数值,可以使用atoi()、atof()、atol()等,数值转换为字符串可以使用itoa()、sprintf()等,但itoa与编译器有关,并不是标准函数,而sprintf可能会不安全。使用lexical_cast可以很容易地在数值与字符串之间转换,只需在模板参数中指定转换的目标类型即可。如int x = lexical_cast<int>("100"); long y = lexical_cast<long>("10000"); cout << x << " " << typeid(x).name() << endl; cout << y << " " << typeid(y).name() << endl; string strX = lexical_cast<string>(x); cout << strX << endl;lexical_cast除了转换数值和字符串也可以只使用1或0转换bool类型.当lexical_cast无法执行转换操作时会抛出bad_lexical_cast异常,它继承std::bad_cast,所以我们应使用try/catch保护转换代码,如try{ int x = lexical_cast<int>("100"); int y = lexical_cast<int>("test"); } catch (bad_lexical_cast& ex) { cout << ex.what() << endl; }代码输出:bad lexical cast: source type value not be interpreted as target如果被转换的参数是NULL, 如 int x = lexical_cast<int>(NULL); 那么x 为0我们也可根据该异常来编写验证数字字符串的合法性template<typename T> bool isValidNumStr(const char* str) { if (str == nullptr) { return false; } try { lexical_cast<T>(str); return true; } catch (bad_lexical_cast& ex) { return false; } }
boost库学习之 lexical_cast
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。