• ベストアンサー

16進数を入力とするatoi関数の作り方

ライブラリを使用せずに、16進数を入力とするatoi関数はどうすれば作れますか? (関数のはじめは「int my_atoi16(const char *str)」で始まります。」 本に載ってる問題なのですが、答えをなくしてしまったので、困ってます。 どなたかお願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

既に回答されている通り…です。 強いてあげればa~fはA~Fと大文字で渡される可能性も考慮した方がいい。ってところでしょうか。 実装方法は何通りかありますかねぇ。 # 文字コード利用する方法がたぶん普通でしょうが。

その他の回答 (2)

noname#208507
noname#208507
回答No.3

ASCIIコード前提でよければ、下のようなコードで足りるでしょう。 表引きにすると、もう少しスマートに作れる気がしますが。 #define is_hex(c) \  (c>='0' && c<='9') || (c>='a' && c<='f') || (c>='A' && c<='F') #define hex2num(hex, num, min, max, up) \  if ((hex>=min) && (hex<=max)) num = num * 16 + up + hex - min int my_atoi16(const char *str) {  int val = 0;  int sign;  if (str)  {   sign = (*str == '-') ? -1 : 1;   int i = (*str == '-' || *str == '+') ? 1 : 0;   while (is_hex(str[i]))   {    hex2num(str[i], val, '0', '9', 0);    hex2num(str[i], val, 'a', 'f', 10);    hex2num(str[i], val, 'A', 'F', 10);    i++;   }  }  return sign * val; }

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

a→10 b→11 c→12 d→13 e→14 f→15 16で桁上がり で処理すればいいだけです。それ以外の作りは10進数の場合と変わりありません。

関連するQ&A

専門家に質問してみよう