Предполагая, что у меня есть строковая переменная с текстовой строкой шестнадцатеричного числа, как я могу сохранить ее в число?
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.
Следовательно, это должно сделать трюк:
Для получения дополнительной справки вы можете проверить следующую ссылку .