将十六进制缓冲区转换为unsigned int

时间:2012-01-27 09:47:31

标签: c++ hex int unsigned stringstream

我一直在尝试将保存在缓冲区中的十六进制数转换为unsigned int。然而,我正在读取的每个十六进制数字前面的“0x00”一直给我带来问题,实质上问题(在缩小版本中)看起来像这样:

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

任何提示?

注意:程序输出一个高十进制nubmer,等于十六进制的CCCCCC。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

以下适用于我:

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

答案 2 :(得分:0)

我更喜欢sscanf来解决这类问题。

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