Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> 基本 >> 数値を文字列に変換して格納するときの文字列の最大サイズを決定するには

数値を文字列に変換して格納するときの文字列の最大サイズを決定するには

  数値を文字列に変換して格納するときの最大サイズは、「最大桁数」としてVisual C++の場合、定義されています。くわしくは、Visual Studioに付属のソースを見てください。
  その定義を使用してもよいのですが、環境依存してしまいます。

  そこで、STLの numeric_limits を使います。
      std::numeric_limits < XXX >::digits10
  XXX に型名を入れてください(DWORDやintなど)。
  そうすると、その型の最大桁数がわかります。
  よって、数値から文字列に変換するときの最大サイズがわかるのです。

  numeric_limits を使うには、limits をインクルードしてください。

   Visual C++は、STLの実装でもそのまま定義値を返すだけなので、_TCHAR を new しなくても使用できます。が、Borland系コンパイラ等では定義値を返すわけではないので、環境依存しないように new しましょう。
   Visual C++で32bit環境と限定するときは、定義値を使用しても全く問題ないです。

   容量が制限された環境では、こんな大雑把ではなく、キチンと計算しましょう。組み込み系以外ではありえないので、Windowsではまずないと思いますが…。

■■■ numericlimits プロジェクト
main.cpp

#include <windows.h>
#include <tchar.h>

#include <limits>

int WINAPI _tWinMain ( HINSTANCE,
    HINSTANCE,
    _TCHAR *,
    int )
{
// 整数の場合は、桁数に、マイナス"-"記号分と、終端のNULLの分を追加
    _TCHAR *pszInt = new _TCHAR[ std::numeric_limits < int >::digits10 + 2 ];

    wsprintf ( pszInt, _TEXT ( "%d" ), -123456 );
    MessageBox ( NULL,
        pszInt,
        _TEXT ( "test" ),
        MB_OK );

    delete[] pszInt;

// unsignedであれば、桁数に、終端のNULLの分のみ追加
    _TCHAR *pszUINT = new _TCHAR[ std::numeric_limits < unsigned int >::digits10 + 1 ];

    wsprintf ( pszUINT, _TEXT ( "%d" ), 123456 );
    MessageBox ( NULL,
        pszInt,
        _TEXT ( "test" ),
        MB_OK );

    delete[] pszUINT;

    return 0;
}

  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita