数字→数値への変換

[戻る]
たけ [E-Mail] 2002/09/21(土) 18:11:04
数字から数値への変換で標準関数「atoi()」などがありますが、
この関数を呼ぶ前に
そのCPUで利用可能な範囲内の数字かどうか(たとえば-32768〜32767など)をチェックして
この範囲内ならば数字から数値へ変換可能な関数を作成しようと思っています。
しかし、この範囲チェックのうまいやり方がわからなくなやんでいます。

みなさんこのような数値の範囲チェックはどのようにしているのでしょうか?
もしよい方法を知っている方がいましたら
ご教授おねがいします。

たいちう 2002/09/21(土) 23:46:23
予めatof()を使えば、doubleの範囲内ではチェックができます。
万全を期すなら、atoi()を自作するのがよいと思います。
K&Rに簡単な例があったと思う。

たけ [E-Mail] 2002/09/22(日) 00:24:17
ご返答ありがとうございます。

やっぱりすべての範囲を考えるとなるとatoi()といった関数を自作するしか
ないみたいですね。
>K&Rに簡単な例があったと思う。
残念ながら私はK&Rを持っていないのですが、
ほかに参考になるようなものを知っている
orほかにこの問題を解決できるよい方法を知っている方
がいましたら教えてください。
よろしくお願いします。

kazuma 2002/09/22(日) 00:56:11
strtolという関数があります。

MSDNによると、
> オーバーフローが発生すると LONG_MAX または LONG_MIN を返します。
> (中略)
> どちらの関数も、オーバーフローまたはアンダーフローが発生すると、
> グローバル変数 errno に ERANGE を設定します。
となっています。

古いスレッドには追加発言できません。