假设我有一个带有十六进制数字文本字符串的字符串变量,如何将其保存为数字?
string n = "0X54";
int a = int(n);
int b = static_cast<int>(n);
它向我抛出了错误:invalid cast from type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to type ‘int’
假设我有一个带有十六进制数字文本字符串的字符串变量,如何将其保存为数字?
string n = "0X54";
int a = int(n);
int b = static_cast<int>(n);
它向我抛出了错误:invalid cast from type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to type ‘int’
您收到的错误清晰简洁:无法将 a 转换
std::string
为int
. 您使用的转换 (static_cast
) 是类型转换;这种转换只允许某些基本类型之间的转换,与具有转换运算符的类之间的转换,或通过继承相关的类之间的转换。对于std::string
eint
,上述情况均不成立。C++ 至少有三个工具可以将字符串转换为数值,除了(Xam 已经提到)
std::stoi
(s
tringto
i
nteger)之外,我们还有以下格式std::stringstream
:在上面的代码中,我们告诉
std::stringstream
我们要将一个十六进制值 (std::hex
) 读入一个类型为 的变量int
;将适用于任何整数数据类型。此外(自 C++17 起)我们有
std::from_chars
,它将一个封闭的值序列转换为一个数字:从 C++11 标准开始,有一个函数
stoi
,可以通过包含头文件来访问它<string>
。这个函数最一般的形式有签名:
对于您的示例,由于您的字符串包含一个十六进制数字,因此将最后一个参数(默认为以 10 为基数)更改为值 16 就足够了。
因此,这应该可以解决问题:
如需更多参考,您可以查看以下链接。