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; // 値を返す }
解説:
前: | 次: