拥有这段代码:
int main(void)
{
char c;
int hex;
....
}
如果c
为'a',我希望hex
成为10.如果c
有'f',hex
应为15.我知道如何完成此操作整数的任务(c - '0'
虽然这令人不悦)或者使用字符串(使用sprintf
或strtol
),但我不知道如何完成这个简单的任务。
答案 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');