2013-05-03 222 views
1

我想知道如何将string x = "1f"这样的东西转换为int y = 0x1f,我发现的每个主题都是通过将它转换为它的整数值(31)或将字符串转换为十六进制等效值"Hello" > 48656C6C6F十六进制字符串到十六进制整数

std::stringstream Strm; 
std::string Stng = "1f"; 
Strm << Stng; 
int Hexa; 
Strm >> std::hex >> Hexa; 
cout << Hexa; 

这最接近我能得到它(但实际上它只是将其转化为整数)

编辑:我想是我不知道我的问题,它必须被存储为整数,只能显示为十六进制,如果我添加std ::十六进制后cout,这是愚蠢的对不起

+0

你只是想打印基数为16?如果是这样的话:cout << std :: hex << Hexa。注意:就处理器而言,“int y = 0x1f”转换为00000000 00000000 00000000 00011111(假设32位整数)。 – EHuhtala 2013-05-03 20:54:20

+3

“它只是将其转换为整数” - 这是可以预料的。没有像十六进制整数这样的东西。 – 2013-05-03 20:56:15

+1

'int y = 0x1f'和'int y = 31'是相同的。 'int'没有表达它的基数的概念。 – 2013-05-03 20:56:53

回答

1

整数不带标签说'我是十进制整数'或'我是十六进制整数'。所有的整数都是一样的。所以,如果你已经找到了一些将十六进制字符串转换为整数的代码,那么这就是你应该使用的代码。

一旦你有你的整数,你可以然后选择以十六进制打印出来,如果你想。你这样做hex

int hexa = ...; 
cout << hex << hexa; // prints an int in hexadecimal form 
0

你有两个选择:如果输入的字符串是不正确的十六进制数

  1. std::strtol
  2. std::stoi

最后会抛出异常。

请记住,在计算机中所有整数都以二进制存储,十六进制只是一个表示。例如,ASCII字符'a'与十进制数97相同,并且与八进制数141相同,并且与十六进制数61相同,并且与二进制数相同(其最终被存储在存储器中)01100001

+0

这将是61,而不是六十六... – 2013-05-03 22:28:02