我知道输出十六进制时我可以使用
cout<<hex<<(unsigned int)(unsigned char)ch<<endl
但是我通过使用
从标准输入中获取一个字符cin.read((char*)&ch , sizeof(unsigned char))
这次怎么把
ch
改成hex
?
cin.read((char*)&ch , sizeof(unsigned char));
cout << hex << (unsigned int)(ch) << endl;
应该工作。
十六进制基本上只是一个数字,所以主要考虑的是检查字符实际上是十六进制,然后执行基本的数学运算将其转换为二进制表示形式。
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;
}
NB:如果它是一个多字符的十六进制数,您将需要处理十六进制的位移
如果您尝试将单个字符转换为十六进制以使用 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 作为您的新号码。如果你需要做一个以上的数字,你可以把它放在一个循环中。