2014-09-05 21 views
0

我已經在網上搜索,但它似乎並沒有解決我的問題。基本上我有一個std::string其中包含一個十六進制內存地址(例如0x10FD7F04)。這個數字是從文本文件中讀取的,顯然保存爲std::string以十六進制數字轉換std :: string數字

我需要將此字符串轉換爲int值,但保留十六進制表示法,0x。有沒有辦法做到這一點?

回答

4

我需要將此字符串轉換爲int值,但保留十六進制符號0x。有沒有辦法做到這一點?

有兩個部分你的問題:

  1. 將字符串十六進制表示爲整數。

    std::string your_string_rep{ "0x10FD7F04" }; 
    std::istringstream buffer{ your_string_rep }; 
    int value = 0; 
    buffer >> std::hex >> value; 
    
  2. 在結果值上保留十六進制表示法。這是不必要的/可能的,因爲一個int已經是一個十六進制值(和一個十進制值和一個二進制值,取決於你如何解釋它)。

換句話說,與上面的代碼,你可以這樣寫:

assert(value == 0x10FD7F04); // will evaluate to true (assertion passes) 
+0

爲什麼不使用std :: stoul? – Veritas 2014-09-05 12:20:19

1

您可以使用C++ 11 std::stoi功能:

#include <iostream> 
#include <iomanip> 
#include <string> 

int main() 
{ 
    std::string your_string_rep{"0x10FD7F04"}; 
    int int_rep = stoi(your_string_rep, 0, 16); 
    std::cout << int_rep << '\n'; 
    std::cout << std::hex << std::showbase << int_rep << '\n'; 
} 

輸出:

285048580 
0x10fd7f04 
0

或者y ou可以使用類似這樣的東西

std::string hexstring("0x10FD7F04"); 
int num; 
sscanf(hexstring.data(), "%x", &num); 
相關問題