0

我正在编写一个十六进制到十进制的转换函数。输入是单个字符,它被转换为十六进制并以字符形式返回。这是功能

char hex2dec(char inp)
{
    char out;
    cout << "inp:" << inp;

    if(inp >= '0' && inp <='9')
    {
        out = (inp - '0');
        cout << " out " << out;
    }
    else 
    {
        out = (toupper(inp) - 'A' + 10);
        cout << " out " << out;
    }

    return out;
}

当我将 '0' 和 'A' 传递给函数时,我得到的打印是 inp:0 out inp:A out 即没有打印出来。

我找不到问题..有人可以帮忙吗?

4

4 回答 4

2

您实际上要打印的是带有代码 [0-15] 的 ascii 字符,这些字符不是可打印的字符,即您想打印 15 但您打印“\x0f”等

利用:

cout << (int)out;

并且您将强制 cout 调用方法打印整数而不是字符 - 这将解决您的问题。

..或更多'c++++ ish';-)

cout << static_cast(out);

..或者这对于大多数人来说看起来很奇怪:

cout << int(out);

于 2013-10-31T13:15:56.963 回答
0

你从 print 中得到 'A' 的原因是 out 是 char ,在 'A' - 'A' + 10 之后,out 是 ascii 值为 10 而不是整数 10 的字符。所以你会得到一个字符ascii 值是 10 而不是得到 'A'。检查 ascii 表后,该字符为空,这可以解释为什么你在输出中什么都没有。

于 2013-10-31T13:22:12.183 回答
0

只需std::stringstream用于此目的。

#include <iostream>
#include <sstream>

int main (int argc, char ** argv)
{
  // use hex formatting
  std::stringstream stream;
  stream << std::hex << 'A';

  // retrieve value of the hex input character
  int value;
  stream >> value;
  std::cout << value << std::endl; // prints 10

  // reset the stream
  stream.str ();
  stream.clear();

  // also works for strings
  stream << "0xABC" << std::endl;
  stream >> value;
  std::cout << value << std::endl; // prints 2748

  return 0;
}
于 2013-10-31T13:16:27.290 回答
0

使用int out而不是char out. cout打印char为字符而不是整数。ASCII 值 0-15 是不可打印的控制字符。

于 2013-10-31T13:14:11.180 回答