有这一段代码:转换炭C = 'a' 到int值= 10
int main(void)
{
char c;
int hex;
....
}
c
如果是 '一' 我想hex
成为10.如果c
具有 'F',hex
应是15.我知道如何完成这个任务整数(与c - '0'
虽然这皱起了眉头)或字符串(使用sprintf
或strtol
),但我不知道如何完成这个简单的任务一般。
有这一段代码:转换炭C = 'a' 到int值= 10
int main(void)
{
char c;
int hex;
....
}
c
如果是 '一' 我想hex
成为10.如果c
具有 'F',hex
应是15.我知道如何完成这个任务整数(与c - '0'
虽然这皱起了眉头)或字符串(使用sprintf
或strtol
),但我不知道如何完成这个简单的任务一般。
我想你的意思是如果那c == 'a'
,那么hex = 10
。 试试这个(假设c
总是在['0'..'9']
工会['a'..'f']
:
hex = (c >= 'a' ? c - 'a' + 10 : c - '0');
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具有“4”,我想你想的十六进制存储4还是你想二进制:??“100” –
此外, c的范围是什么?你想让它成为'char'还是'uchar'?我认为你想从0到256,这将是一个'uchar'。 –
我看不到如何将字符4映射到十六进制10?十进制10是(十进制)16。 – abelenky