INIファイルへの浮動小数点の読み書き

[戻る]
ようへー 2002/11/21(木) 22:48:27
INIファイルについての質問です。
環境はVC++6.0、WinXPです。

文字列や数値(整数)を読み書きする関数はありますが、floatやdoubleの浮動小数点を読
み書きする関数って無いんですかね?

Get(Write)ProfileBinaryを見つけて試してみたのですが、デバック時にコンパイルは成
功するのですが、「Debug Assetion Failed!」のエラーが出てしまします。

無理やり整数にするとGet(Write)ProfileIntを使って読み書きは出来てます。

何か良い関数や方法は無いですか?
よろしくお願いします。

ようへー 2002/11/21(木) 22:52:47
追加です。

現在はMFCを使用しています。

sugar 2002/11/21(木) 23:26:28
3.14という小数を"3.14"という文字列として扱えば・・・

wood 2002/11/22(金) 07:22:40
>INIファイルについての質問です。
INIファイルって「テキスト形式ファイル」のもの多いですけど
読み書きしようとしているデータの1行を具体的に
この掲示板に書き込むこと出来ませんか?
あまり難しいこと考えなくても良いかもしれないので...

sara 2002/11/22(金) 09:02:34
sugarさんの方法が普通だと思いますが、精度などを気にしたくないならこんなのはどうでしょ
う?
無理やり整数にするというやり方と同じでしたらごめんなさい。

union UTypeChange32
{
   float   m_float;
   int     m_int;
};
union UTypeChange64
{
   double   m_double;
   __int64  m_int64;
};

void WriteProfileFloat( LPCTSTR lpszSection, LPCTSTR lpszEntry, float fValue )
{
   UTypeChange32 data;
   data.m_float = fValue;
   AfxGetApp()->WriteProfileInt( lpszSection, lpszEntry, data.m_int );
}

float GetProfileFloat( LPCTSTR lpszSection, LPCTSTR lpszEntry, float fDefault )
{
   UTypeChange32 dataDefault, dataRet;

   dataDefault.m_float = fDefault;
   dataRet.m_int = (int)AfxGetApp()->GetProfileInt( lpszSection, lpszEntry, 
dataDefault.m_int );
   return dataRet.m_float;
}

void WriteProfileInt64( LPCTSTR lpszSection, LPCTSTR lpszEntry, __int64 nValue )
{
   char buf[24];
   AfxGetApp()->WriteProfileString( lpszSection, lpszEntry, _i64toa( nValue, 
buf, 10 ) );
}

__int64 GetProfileInt64( LPCTSTR lpszSection, LPCTSTR lpszEntry, __int64 
nDefault )
{
   CString s = AfxGetApp()->GetProfileString( lpszSection, lpszEntry, "" );
   if( s.IsEmpty() )
      return nDefault;
   return _atoi64( (LPCTSTR)s );
}

void WriteProfileDouble( LPCTSTR lpszSection, LPCTSTR lpszEntry, double dValue )
{
   UTypeChange64 data;
   data.m_double = dValue;
   WriteProfileInt64( lpszSection, lpszEntry, data.m_int64 );
}

double GetProfileDouble( LPCTSTR lpszSection, LPCTSTR lpszEntry, double 
dDefault )
{
   UTypeChange64 dataDefault, dataRet;

   dataDefault.m_double = dDefault;
   dataRet.m_int64 = GetProfileInt64( lpszSection, lpszEntry, 
dataDefault.m_int64 );
   return dataRet.m_double;
}

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