有這一段代碼:轉換炭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