将char c ='a'转换为int value = 10

时间:2013-11-14 22:50:47

标签: c hex

拥有这段代码:

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

如果c为'a',我希望hex成为10.如果c有'f',hex应为15.我知道如何完成此操作整数的任务(c - '0'虽然这令人不悦)或者使用字符串(使用sprintfstrtol),但我不知道如何完成这个简单的任务。

2 个答案:

答案 0 :(得分: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')。第一种方法更灵活,并允许例如更大的基数或转换八进制数。

答案 1 :(得分:3)

我想你的意思是c == 'a',然后是hex = 10。 试试这个(假设c始终位于['0'..'9'] union ['a'..'f']

hex = (c >= 'a' ? c - 'a' + 10 : c - '0');