十六进制char到十进制并将输出存储为char

时间:2013-10-31 13:05:55

标签: c++ hex decimal

我正在写一个十六进制到十进制转换函数。输入是单个字符,转换为十六进制并作为char返回。 这是函数

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 个答案:

答案 0 :(得分:2)

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

使用:

  

cout&lt;&lt; (INT)的;

并且你将强制cout调用方法打印ints而不是chars - 这将解决你的问题。

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

  

cout&lt;&lt;的static_cast(下);

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

  

cout&lt;&lt; INT(下);

答案 1 :(得分:0)

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

答案 2 :(得分: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;
}

答案 3 :(得分:0)

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