1

有这段代码:

int main(void)
{
    char c;
    int hex;
    ....
}

如果c是 'a' 我想hex变成 10。如果c有 'f',hex应该是 15。我知道如何为整数(c - '0'尽管这不受欢迎)或字符串(使用sprintfor strtol)完成这项任务,但我不知道一般如何完成这个简单的任务。

4

2 回答 2

5
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')。第一种方法更灵活,例如允许更大的基数或转换八进制数。

于 2013-11-14T22:54:24.240 回答
3

我猜你的意思是如果那样c == 'a'的话hex = 10。试试这个(假设c总是在['0'..'9']union ['a'..'f']

hex = (c >= 'a' ? c - 'a' + 10 : c - '0');
于 2013-11-14T22:57:30.153 回答