10進/16進変換?

最近、よくバイナリファイルをバイナリエディタで見る。
しかし、例えば


22 01 00 00

となっていても、これが10進でいくつになるかすぐにはわからないだろう。


そこで、次のような関数を作る。


int dec2hex(int x) {
int y = 0;
int h = 1;
while(x != 0) {
int mod = x % 10;
y += h * mod;
x = (x - mod) / 10;
h <<= 4;
}

return y;
}

そうして、


int x = dec2hex(290);
fwrite(&x, sizeof(x), 1, fp);

としてファイルに書いて、バイナリエディタで見ると、


90 02 00 00

となって、290とすぐわかる。
(リトルエンディアンだから順番逆だが)


読むときは、読んでから逆変換する。