我已經在網上搜索,但它似乎並沒有解決我的問題。基本上我有一個std::string
其中包含一個十六進制內存地址(例如0x10FD7F04)。這個數字是從文本文件中讀取的,顯然保存爲std::string
。以十六進制數字轉換std :: string數字
我需要將此字符串轉換爲int值,但保留十六進制表示法,0x。有沒有辦法做到這一點?
我已經在網上搜索,但它似乎並沒有解決我的問題。基本上我有一個std::string
其中包含一個十六進制內存地址(例如0x10FD7F04)。這個數字是從文本文件中讀取的,顯然保存爲std::string
。以十六進制數字轉換std :: string數字
我需要將此字符串轉換爲int值,但保留十六進制表示法,0x。有沒有辦法做到這一點?
我需要將此字符串轉換爲int值,但保留十六進制符號0x。有沒有辦法做到這一點?
有兩個部分你的問題:
將字符串十六進制表示爲整數。
std::string your_string_rep{ "0x10FD7F04" };
std::istringstream buffer{ your_string_rep };
int value = 0;
buffer >> std::hex >> value;
在結果值上保留十六進制表示法。這是不必要的/可能的,因爲一個int已經是一個十六進制值(和一個十進制值和一個二進制值,取決於你如何解釋它)。
換句話說,與上面的代碼,你可以這樣寫:
assert(value == 0x10FD7F04); // will evaluate to true (assertion passes)
您可以使用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
或者y ou可以使用類似這樣的東西
std::string hexstring("0x10FD7F04");
int num;
sscanf(hexstring.data(), "%x", &num);
爲什麼不使用std :: stoul? – Veritas 2014-09-05 12:20:19