2012-01-27 47 views
0

我一直在嘗試將保存在緩衝區中的十六進制數轉換爲unsigned int。然而,「0×00」,因爲我是從讀書一直給我的問題,本質問題(在縮小的版本)每個十六進制數的前面看起來像這樣:將十六進制緩衝區轉換爲unsigned int

char b[] = "0x0014A12"; 
std::stringstream ss; 
unsigned int i; 
ss << std::hex << b; 
ss >> i; 
cout << i << endl; 

任何提示嗎?

注意:程序輸出一個高十進制數,等於CCCCCC十六進制數。

+3

'焦炭B = {} 0x0014A12;' - 你有你的平臺上的32位字符? – Mat 2012-01-27 09:51:48

+0

@Mat這是個例子中的拼寫錯誤,但是謝謝你指出。正如我在帖子中寫到的,它在實際程序中保存在緩衝區中。 – Andreas 2012-01-27 09:53:31

+0

http://stackoverflow.com/a/1070499/1168156 – LihO 2012-01-27 09:54:40

回答

4

也能正常工作對我來說:

#include <iostream> 
#include <sstream> 

int main(int argc, char* argv[]) 
{ 
    using namespace std; 

    string b("0x0014A12"); 

    stringstream ss; 
    ss << hex << b; 

    unsigned int dec; 
    ss >> dec; 

    cout << b << " = " << dec << endl; 
    return 0; 
} 

輸出:

0x0014A12 = 84498 
+0

對我來說工作得很好,我有點搞砸了這個例子,轉換並不是程序中的實際問題,而是存儲的十六進制的內存被破壞了。在提問之前應該多想一些,但是謝謝你的回答,這也適用於我。 – Andreas 2012-01-27 10:09:38

+0

不客氣。 – LihO 2012-01-27 10:11:45

0

我喜歡的sscanf對於這類問題。

sscanf(b, "0x%x", &i); 
1

對我來說,以下工作:

char b[] = "0x0014A12"; 
unsigned int i; 
sscanf(b, "%X", &i); 
相關問題