...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

16進数→10進数

某所の「2の補数表現の16進数」の文字列を10進数の数値に変換するコードを見てなるほどと思った.まとめるとこんな関数になるだろうか.

long hexToDecimal(char c)
{
  return hexToDecimal([c]);
}
long hexToDecimal(char[] str)
{
  long sum;
  foreach(char c; str)
    sum = sum*16 + ((c|0x20)-'0')%('W'-'0');
  return sum;
}

%('W'-'0'); がポイントなのかなー.さすがです.誰かが言っているように std.string に入れてもらったらいいかもしれない.他にn進数からm進数へ変換する関数を作ったらなおよさそう.誰かやるかな?