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;
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值