有这段代码:
int main(void)
{
char c;
int hex;
....
}
如果c是 'a' 我想hex变成 10。如果c有 'f',hex应该是 15。我知道如何为整数(c - '0'尽管这不受欢迎)或字符串(使用sprintfor strtol)完成这项任务,但我不知道一般如何完成这个简单的任务。
if (c >= '0' && c <= '9')
hex = c - '0';
else if (c >= 'a' && c <= 'z')
hex = c - 'a' + 10;
else if (c >= 'A' && c <= 'Z')
hex = c - 'A' + 10;
else
abort();
要捕获错误输入,您可以添加
if (hex >= base) /* base would be e.g. 16 */
abort();
或者当base是固定的,你可以限制上限(例如c <= 'f'代替c <= 'z')。第一种方法更灵活,例如允许更大的基数或转换八进制数。
我猜你的意思是如果那样c == 'a'的话hex = 10。试试这个(假设c总是在['0'..'9']union ['a'..'f']:
hex = (c >= 'a' ? c - 'a' + 10 : c - '0');