プロが教えるわが家の防犯対策術!

VC++2005で、 CStringをshort型に変換できませんか?

intに変換でしたらttoiとかがあるようですが、shortにするttosとかはないみたいですが・・。

ご存じの方お願いします・・・。

A 回答 (3件)

template<typename T> struct sstream;


template<> struct sstream<char>
{
 typedef std::istringstream type;
};
template<> struct sstream<wchar_t>
{
 typedef std::wistringstream type;
};

short to_short(const CString& s)
{
 sstream<TCHAR>::type is( (const TCHAR*)s );
 short val;
 is >> val;
 return val;
}

これでどうでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/12/11 22:39

_tcstolを使って、いったんlong型に変換してから範囲チェックをしましょう。



CString str = _T("123");
TCHAR* endptr;
errno = 0;
long l = _tcstol(str, &endptr, 0);
if (errno != 0 || *endptr != _T('\0') || l < SHRT_MIN || SHRT_MAX < l)
{
  // エラー処理
}
short result = static_cast<short>(l);
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2011/12/11 22:39

「CStringをshort型に変換」というのが何をしたいのか分りかねます. 「int に変換」ではダメなのですか?



そもそも short を積極的に使おうという気にはならないんだけど....
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/12/11 22:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています