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

C++ 将十六进制字符串转换为C+中的十进制数+;,c++,string,hex,decimal,C++,String,Hex,Decimal,我想把十六进制字符串转换成C++中的十进制数(整数),并尝试如下方式: std::wstringstream SS; SS << std::dec << stol(L"0xBAD") << endl; 但是它返回了-425771592,而不是2989 std::wstringstream SS; SS << std::dec << reinterpret_cast<LONG>(L"0xBAD") << endl

我想把十六进制字符串转换成C++中的十进制数(整数),并尝试如下方式:

std::wstringstream SS;
SS << std::dec << stol(L"0xBAD") << endl;
但是它返回了
-425771592
,而不是
2989

std::wstringstream SS;
SS << std::dec << reinterpret_cast<LONG>(L"0xBAD") << endl;
但是,当我像下面这样使用它时,它工作得很好,并给出了预期的
2989

std::wstringstream SS;
SS << std::dec << 0xBAD << endl;
std::wstringstream-SS;
SS
//stol示例
#include//std::cout
#包括//标准::字符串,标准::stol
int main()
{
std::string str_dec=“1987520”;
std::string str_hex=“2f04e009”;
std::string str_bin=“-111010011001001111010”;
std::string str_auto=“0x7fffff”;
std::string::size\u type sz;//size\u t的别名
long li_dec=std::stol(str_dec和sz);
长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);

问题是什么?你有一个有效的方法。@NathanOliver我正确地更新了它。可能的重复:@ViktorChvátal是的,我看起来你也是正确的。谢谢你!它有效了!:-)由于我搜索的方式,我在谷歌上搜索了很多次,没有找到任何东西。但是,我找不到帖子。虽然这段代码可以解决这个问题swer最好解释一下它是如何/为什么产生的。记住,你的答案不仅针对提出问题的用户,也针对找到问题的所有其他人。
// 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;
}