有这段代码:
int main(void)
{
char c;
int hex;
....
}
如果c
是 'a' 我想hex
变成 10。如果c
有 'f',hex
应该是 15。我知道如何为整数(c - '0'
尽管这不受欢迎)或字符串(使用sprintf
or 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');