bool ishexdigit(char ch)
{
return isdigit(ch) || ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f';
}
int my_atohex(const char *str)
{
if( !ishexdigit(*str) ) { // str の先頭文字が16進数文字でない場合は -1 を返す
return -1;
}
int val = 0; // 初期値を 0 に設定
while( ishexdigit(*str) ) { // str の指す先が16進数文字である間
if( isdigit(*str) ) { // 10進数文字の場合
val = val * 16 + *str++ - '0'; // 値を16倍し、数字を足す
} else if( *str >= 'A' && *str <= 'F' ) { // A ~ F の場合
val = val * 16 + *str++ - 'A' + 10; // 値を16倍し、数字を足す
} else { // a ~ f の場合
val = val * 16 + *str++ - 'a' + 10; // 値を16倍し、数字を足す
}
}
return val; // 値を返す
}
解説:
前: | 次: