我正在写一个十六进制到十进制转换函数。输入是单个字符,转换为十六进制并作为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 没有任何东西印在外面。
我无法找到问题。任何人都可以帮忙吗?
答案 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 out
。 cout
将char
打印为字符而不是整数。 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表后,该字符为空,这可以解释为什么你在输出中什么也得不到。