如何正确地将其转换为十六进制?

时间:2014-11-18 05:57:01

标签: c++ hex decimalformat

我有一个问题,我尝试使用以下代码将数字转换为十六进制。

int numconvert(string hexnum)
{
stringstream converter(hexnum);
unsigned int value = 0;
converter >> hex >> value;
return value;
}

string hexconvert(int hexnum)
{
stringstream ss;
ss << hex << hexnum;

string n;
ss >> n;
return n;
}

我使用numconvert将输入从string更改为int,然后使用hexconvert将其更改为十六进制并将其存储为字符串。

一切似乎工作得很好但是出于某种原因,当我通过它4096时,它给了我4096年。我期待1000但我不确定为什么它错误对我。我给它4096并且我注意到它返回一个16534的int,然后程序将它发送到hexconvert并返回4096,这在技术上是正确的,但不是我想要的。

似乎处理其他数字就好了。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为那里有一个逻辑错误。如果你写:

int n = numconvert("4096");
std::string s = hexconvert(n);

你基本上告诉它将“4096”解释为十六进制数,因为你在converter >> hex >> value;内得到numconvert,将它转换回十六进制总会导致同样的返回。

你想要的可能是

int n = std::stoi("4096");
std::string s = hexconvert(n);

这会将“4096”解释为普通基数10,然后使用hexconvert将其转换为十六进制字符串。


那说你的numconvert可以写得更短,使用std::stoi也可能更有效率,它基本上只是:

int numconvert(const std::string& str)
{
    return std::stoi(str, nullptr, 16);
}

我们不需要第二个参数,所以我们传递nullptr,第三个参数是基础。

答案 1 :(得分:0)

尝试使用str成员而不是提取运算符,从字符串流中弹出字符串。除了更直接之外,您不必担心提取器如何进一步解释事物。