2013-05-03 319 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

相關問題