文字列の16進数を値の10進数に変換
hex2dec.c
#include <stdio.h>
int hex2dec(int hex)
{
return hex % 87 % 48;
}
int main(void)
{
char input;
scanf("%s", &input);
printf("%d\n", hex2dec(input));
}
input(文字列を入力)
9
output(数値が出力)
9
input(文字列を入力)
f
output(数値が出力)
15
なんでこうなるのか
そもそも87や48はどっから出てきたのか。
自分なりの解釈
48ってなんやねん
10進数の48は文字コードで0であり、それで割った余りが値としての数値が出てきた。
0から9まではこの処理で大丈夫
じゃあ87は?
10進数の87は文字コードでW。なんの関係もなかった
置きかえよう
87を10進数として16進数で表記した場合、57となった
57を10進数で表した場合、文字コードで9であった
つまり……どういうことだってばよ?
57:文字コードで「9」
87:10進数を16進数として、この値で割った余りがa~fの値としての数値となる
よって、10~15が出力される
まとめ
48:文字コードで「0」
87:文字コードで「9」を16進数に変換した57を、更に10進数に変換した値
上2つの値で割った余りが値としての16進数に変換される
手計算でもこうなるのは確認したけど、なんでこうなるのかは全くわからん。誰か教えて……
参照
ASCIIコード表
http://www3.nit.ac.jp/~tamura/ex2/ascii.html
2進数、8進数、10進数、16進数相互変換ツール
https://hogehoge.tk/tool/number.html