【问题标题】:How can I correctly convert this to hex?我怎样才能正确地将其转换为十六进制?
【发布时间】:2014-11-18 05:57:01
【问题描述】:

我在尝试使用以下代码将数字转换为十六进制时遇到问题。

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,这在技术上是正确的,但不是我想要的。

它似乎可以很好地处理其他数字。我在这里做错了什么?

【问题讨论】:

  • 您的问题不清楚。你“通过它4096”。你把它传递给什么功能?如果它“返回 16534 的 int”,我假设您的意思是 numconvert("4096"),即将(十六进制!)“4096”转换为(十进制!)16534。按设计工作。如果“程序将其发送到 hexconvert 并返回 4096”,那也是正确的。请更准确地说明您正在做什么(即添加main() 并使您的示例可编译/可重现)、观察到的输出和预期输出。此外,考虑ss.str()

标签: c++ hex decimalformat


【解决方案1】:

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

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

您基本上告诉它已经将“4096”解释为十六进制数字,因为您在numconvert 中得到了converter &gt;&gt; hex &gt;&gt; value;,将其翻译回十六进制总是会导致返回相同的结果。

你想要的大概是

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,第三个参数是基数。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 2017-11-13
      • 2016-06-15
      • 2012-06-29
      • 2021-11-12
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      相关资源
      最近更新 更多