INIファイルについての質問です。
環境はVC++6.0、WinXPです。
文字列や数値(整数)を読み書きする関数はありますが、floatやdoubleの浮動小数点を読
み書きする関数って無いんですかね?
Get(Write)ProfileBinaryを見つけて試してみたのですが、デバック時にコンパイルは成
功するのですが、「Debug Assetion Failed!」のエラーが出てしまします。
無理やり整数にするとGet(Write)ProfileIntを使って読み書きは出来てます。
何か良い関数や方法は無いですか?
よろしくお願いします。
追加です。
現在はMFCを使用しています。
3.14という小数を3.14という文字列として扱えば・・・
>INIファイルについての質問です。
INIファイルって「テキスト形式ファイル」のもの多いですけど
読み書きしようとしているデータの1行を具体的に
この掲示板に書き込むこと出来ませんか?
あまり難しいこと考えなくても良いかもしれないので...
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;
}