在C++中将十六进制字符串转换为十进制数

3
我想在C++中将一个十六进制字符串转换成十进制数字(整数),并尝试了以下方法:
std::wstringstream SS;
SS << std::dec << stol(L"0xBAD") << endl;

但它返回了0而不是2989
std::wstringstream SS;
SS << std::dec << reinterpret_cast<LONG>(L"0xBAD") << endl;

但是它返回的是-425771592而不是2989

但是,当我像下面这样使用时,它正常工作并按预期给出2989

std::wstringstream SS;
SS << std::dec << 0xBAD << endl;

但我想输入一个字符串,并将2989作为输出,而不是像0xBAD这样的整数输入。例如,我想输入"0xBAD"并将其强制转换为整数,然后转换为十进制数。

提前感谢。


2
那么问题是什么?你已经有一个可行的方法了。 - NathanOliver
1
可能重复:https://dev59.com/43NA5IYBdhLWcg3wKaYx - Viktor Chvátal
1
第三个参数 base - O'Neil
你认为 stol(L"0xBAD") 为什么会起作用?在那一行上你有收到编译器警告吗? - n. m.
抱歉,我的错,这是一行正确的代码。 - n. m.
显示剩余3条评论
1个回答

8
// stol example
#include <iostream>   // std::cout
#include <string>     // std::string, std::stol

int main ()
{
  std::string str_dec = "1987520";
  std::string str_hex = "2f04e009";
  std::string str_bin = "-11101001100100111010";
  std::string str_auto = "0x7fffff";

  std::string::size_type sz;   // alias of size_t

  long li_dec = std::stol (str_dec,&sz);
  long li_hex = std::stol (str_hex,nullptr,16);
  long li_bin = std::stol (str_bin,nullptr,2);
  long li_auto = std::stol (str_auto,nullptr,0);

  std::cout << str_dec << ": " << li_dec << '\n';
  std::cout << str_hex << ": " << li_hex << '\n';
  std::cout << str_bin << ": " << li_bin << '\n';
  std::cout << str_auto << ": " << li_auto << '\n';

  return 0;
}

谢谢!它起作用了! :-) 我搜索了很多次,但由于我的搜索方式,什么都没找到。但是,我找不到这篇帖子。 - GTAVLover
2
虽然这段代码可能解决了问题,但如果能够解释一下它是如何/为什么解决的,答案会更好。请记住,你的回答不仅仅是为了提问者,也是为了所有其他发现这个问题的人。 - NathanOliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接