続、文字列から数値化

aotiの代わりにstrtolという関数があることを知った。これを使えば、文字列のどの位置まで比較できたかということを知ることができるし、さらに桁あふれも検出できるようなので、これを使えば容易に数値化できるようだ。とりあえず、以下のように実装してみた。

long ToLong(const CString& text)
{
char* end;
long num = ::strtol(text, &end, 0);
if (errno == ERANGE) {
throw COverflowException()
}

if (strcmp(end, "") != 0) {
num = LONG_MIN;
}
return num;
}

ということで、ファイナルアンサー。手抜きしまくりだけど、リストコントロールのソートくらいには使えるだろう。