我知道当输出十六进制我可以使用
cout<<hex<<(unsigned int)(unsigned char)ch<<endl
但是我从标准输入中得到一个字符
cin.read((char*)&ch , sizeof(unsigned char))
这次如何将ch更改为hex?
ch
hex
eagi6jfj1#
cin.read((char*)&ch , sizeof(unsigned char)); cout << hex << (unsigned int)(ch) << endl;
应该行得通。
gmol16392#
十六进制基本上只是一个数字,所以主要考虑的是检查字符实际上是十六进制,然后执行一个基本的数学运算,将其转换为二进制表示。
uint8_t constexpr NOT_HEX = -1; uint8_t char_to_hex(char c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'a' && c <= 'f') return c - 'a' + 10; if (c >= 'A' && c <= 'F') return c - 'A' + 10; return NOT_HEX; }
注意:如果是多字符十六进制数,则需要处理十六进制的位移位
emeijp433#
如果你想把一个字符转换成十六进制来做数学运算,比如if,你可以用这样的语句把ascii字符表示转换成它的实际数字:
char x = 'A'; int y = x; if(y > 47 && y < 58) //this covers 0-9 y = y - 48; else if (y > 64 && y < 71) // this covers A-F y = y - 55;
然后用y作为你的新数字。如果你需要对多个数字做这个,你可以把它放在一个循环中。
3条答案
按热度按时间eagi6jfj1#
应该行得通。
gmol16392#
十六进制基本上只是一个数字,所以主要考虑的是检查字符实际上是十六进制,然后执行一个基本的数学运算,将其转换为二进制表示。
注意:如果是多字符十六进制数,则需要处理十六进制的位移位
emeijp433#
如果你想把一个字符转换成十六进制来做数学运算,比如if,你可以用这样的语句把ascii字符表示转换成它的实际数字:
然后用y作为你的新数字。如果你需要对多个数字做这个,你可以把它放在一个循环中。