commit 2025-10-09 10:41 bug fix about wchar_t in ZCppMain/ZtCStringEx.H and add ZftAtoI(), ZftAotL() etc in ZCppMain/ZMainHead.H

This commit is contained in:
2025-10-09 10:41:59 +09:00
parent f2a67017c8
commit ce0d364102
4 changed files with 165 additions and 55 deletions

View File

@ -193,6 +193,7 @@
#include <string> #include <string>
#include <climits> #include <climits>
#include <typeinfo> #include <typeinfo>
#include <wchar.h>
#define _CODE_OLD_ 0 #define _CODE_OLD_ 0
@ -817,22 +818,11 @@ namespace ZNsMain
template<typename TTypChar> class ZtCCharInt template<typename TTypChar> class ZtCCharInt
{ { public: typedef typename ZtCCharIntBySize<sizeof(TTypChar)>::TypeInt TypeInt; };
public: typedef typename ZtCCharIntBySize<sizeof(TTypChar)>::TypeInte TypeInt;
};/*
template<typename TTypChar> class ZtCCharInt*/
template<> class ZtCCharInt<char > template<> class ZtCCharInt<char >
{ { public: typedef typename ZtCCharIntBySize<sizeof(char) >::TypeInt TypeInt; };
public: typedef typename ZtCCharIntBySize<sizeof(char) >::TypeInt TypeInt;
};/*
template<> class ZtCCharInt<char>*/
template<> class ZtCCharInt<wchar_t> template<> class ZtCCharInt<wchar_t>
{ { public: typedef typename ZtCCharIntBySize<sizeof(wchar_t) >::TypeInt TypeInt; };
public: typedef typename ZtCCharIntBySize<sizeof(wchar_t) >::TypeInt TypeInt;
};/*
template<> class ZtCCharInt<wchar_t>*/
template<typename TTyChar, typename TTyiLength> ZTypIntE ZftGetCompareCode template<typename TTyChar, typename TTyiLength> ZTypIntE ZftGetCompareCode
@ -3814,6 +3804,78 @@ namespace ZNsMain
inline double ZfAtoD(const char* ApcChar)*/ inline double ZfAtoD(const char* ApcChar)*/
/*#############################################################################
■ #include <wchar.h>
long int wcstol(const wchar_t *nptr, wchar_t **endptr, int base);
#include <wchar.h>
long long int wcstoll(const wchar_t *nptr, wchar_t **endptr, int base);
float wcstof ( const wchar_t* str, wchar_t** str_end ); (since C++11)
double wcstod ( const wchar_t* str, wchar_t** str_end );
long double wcstold( const wchar_t* str, wchar_t** str_end ); (since C++11)
-- 2025-10-08 09:23
#############################################################################*/
template<typename TTypChar> inline
ZTypInt ZftAtoI (const TTypChar* ApcChar){ return 0; }
template<> inline
ZTypInt ZftAtoI (const char* ApcChar){ return ZfAtoI(ApcChar); }
template<> inline
ZTypInt ZftAtoI (const wchar_t* ApcChar){ return (ZTypInt)::wcstol(ApcChar, 0, 0) ; }
template<typename TTypChar> inline
ZTypLong ZftAtoL (const TTypChar* ApcChar){ return 0; }
template<> inline
ZTypLong ZftAtoL (const char* ApcChar){ return ZfAtoI(ApcChar); }
template<> inline
ZTypLong ZftAtoL (const wchar_t* ApcChar){ return ::wcstol(ApcChar, 0, 0) ; }
template<typename TTypChar> inline
ZTypLLong ZftAtoLL(const TTypChar* ApcChar){ return 0; }
template<> inline
ZTypLLong ZftAtoLL(const char* ApcChar){ return ZfAtoLL(ApcChar); }
template<> inline
ZTypLLong ZftAtoLL(const wchar_t* ApcChar){ return ::wcstoll(ApcChar, 0, 0) ; }
template<typename TTypChar> inline
double ZftAtoD (const TTypChar* ApcChar){ return 0; }
template<> inline
double ZftAtoD (const char* ApcChar){ return ZfAtoD(ApcChar); }
template<> inline
double ZftAtoD (const wchar_t* ApcChar){ return ::wcstod(ApcChar, 0) ; }
template<typename TTypChar> inline
ZTypInt ZftAtoI (const TTypChar* ApcChar, ZTypInt AI_Length){ return 0; }
template<> inline
ZTypInt ZftAtoI (const char* ApcChar, ZTypInt AI_Length){ return ZfAtoI(ApcChar); }
template<> inline
ZTypInt ZftAtoI (const wchar_t* ApcChar, ZTypInt AI_Length){ return (ZTypInt)::wcstol(ApcChar, 0, 0) ; }
template<typename TTypChar> inline
ZTypLong ZftAtoL (const TTypChar* ApcChar, ZTypInt AI_Length){ return 0; }
template<> inline
ZTypLong ZftAtoL (const char* ApcChar, ZTypInt AI_Length){ return ZfAtoI(ApcChar); }
template<> inline
ZTypLong ZftAtoL (const wchar_t* ApcChar, ZTypInt AI_Length){ return ::wcstol(ApcChar, 0, 0) ; }
template<typename TTypChar> inline
ZTypLLong ZftAtoLL(const TTypChar* ApcChar, ZTypInt AI_Length){ return 0; }
template<> inline
ZTypLLong ZftAtoLL(const char* ApcChar, ZTypInt AI_Length){ return ZfAtoLL(ApcChar); }
template<> inline
ZTypLLong ZftAtoLL(const wchar_t* ApcChar, ZTypInt AI_Length){ return ::wcstoll(ApcChar, 0, 0) ; }
template<typename TTypChar> inline
double ZftAtoD (const TTypChar* ApcChar, ZTypInt AI_Length){ return 0; }
template<> inline
double ZftAtoD (const char* ApcChar, ZTypInt AI_Length){ return ZfAtoD(ApcChar); }
template<> inline
double ZftAtoD (const wchar_t* ApcChar, ZTypInt AI_Length){ return ::wcstod(ApcChar, 0) ; }
inline ZTypLLong AtoLL(const char* ApcChar){return ZfAtoLL(ApcChar);} inline ZTypLLong AtoLL(const char* ApcChar){return ZfAtoLL(ApcChar);}
@ -3837,9 +3899,9 @@ namespace ZNsMain
ZTypLength VL_Length=0; ZTypLength VL_Length=0;
while(*(ApcChar+VL_Length)!=_T('\0')) while(*(ApcChar+VL_Length)!=TTypeCh('\0'))
++VL_Length; ++VL_Length;
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
return VL_Length; return VL_Length;
}/* }/*

View File

@ -1928,27 +1928,11 @@ namespace ZNsMain
}/* }/*
bool IsEmpty() const*/ bool IsEmpty() const*/
int GetInt () const{return ZNsMain::ZfAtoI (mpc_Data);} int GetInt () const{return ZNsMain::ZftAtoI (mpc_Data);}
ZTypLong GetLong () const{return ZNsMain::ZfAtoL (mpc_Data);} ZTypLong GetLong () const{return ZNsMain::ZftAtoL (mpc_Data);}
ZTypLLong GetLongLong() const{return ZNsMain::ZfAtoLL(mpc_Data);} ZTypLLong GetLongLong() const{return ZNsMain::ZftAtoLL(mpc_Data);}
ZTypLLong GetLLong () const{return ZNsMain::ZfAtoLL(mpc_Data);} ZTypLLong GetLLong () const{return ZNsMain::ZftAtoLL(mpc_Data);}
double GetDouble () const{return ZNsMain::ZfAtoD (mpc_Data);} double GetDouble () const{return ZNsMain::ZftAtoD (mpc_Data);}
ZCStringBase& ConvertLLong()
{
ZNsMain::ZTypLLong LLongValue = ZNsMain::ZfAtoLL(mpc_Data);
this->Invalid(); return (*this)(LLongValue);
}/*
ZCStringBase& ConvertLLong()*/
ZCStringBase& ConvertLong()
{
ZNsMain::ZTypLLong LongValue = ZNsMain::ZfAtoL(mpc_Data);
this->Invalid(); return (*this)(LongValue);
}/*
ZCStringBase& ConvertLong()*/
ZCStringBase& Format(TypeCharC* APC_Format, ...) ZCStringBase& Format(TypeCharC* APC_Format, ...)
@ -1957,7 +1941,10 @@ namespace ZNsMain
va_list VP_VarParam; va_list VP_VarParam;
va_start(VP_VarParam, APC_Format); va_start(VP_VarParam, APC_Format);
vsprintf(mpc_Data, APC_Format, VP_VarParam);
if(sizeof(TypeChar)<=1)
::vsprintf ((char* )mpc_Data, /*+++*/ (char* )APC_Format, VP_VarParam);
else ::vswprintf((wchar_t*)mpc_Data, size(), (wchar_t*)APC_Format, VP_VarParam);
InvalidNull(); return *this; InvalidNull(); return *this;
}/* }/*
@ -1971,7 +1958,10 @@ namespace ZNsMain
va_list VP_VarParam; va_list VP_VarParam;
va_start(VP_VarParam, APC_Format); va_start(VP_VarParam, APC_Format);
vsprintf(mpc_Data+ml_UseLen, APC_Format, VP_VarParam);
if(sizeof(TypeChar)<=1)
::vsprintf ((char* )mpc_Data, /*+++*/ (char* )APC_Format, VP_VarParam);
else ::vswprintf((wchar_t*)mpc_Data, size(), (wchar_t*)APC_Format, VP_VarParam);
InvalidNull(ml_UseLen); return *this; InvalidNull(ml_UseLen); return *this;
}/* }/*

View File

@ -62,6 +62,34 @@ namespace ZNsMain
}/* }/*
ZtCStringStd& operator=(const TypeBase& rhs)*/ ZtCStringStd& operator=(const TypeBase& rhs)*/
ZtCStringStd& operator=(const ZCCharView& AR_View)
{
if(this->data()==AR_View.data()){ return *this; }
if( 1 > AR_View.size())
{ this->resize(0); return *this; }
this->resize(AR_View.size());
const int CI_CopySize =
AR_View.size() * sizeof(TypeChar) ;
::memcpy(this->data(), AR_View.data(), CI_CopySize);
return *this; /*::::::::::::::::::::::::::::::::::*/
}/*
ZtCStringStd& operator=(const ZCCharView& AR_View)*/
ZtCStringStd& operator=(ZTypInt AI_Int )
{ this->resize(0); return (*this)(AI_Int ); }
ZtCStringStd& operator=(ZTypLong AL_Long )
{ this->resize(0); return (*this)(AL_Long ); }
ZtCStringStd& operator=(ZTypLLong AL_LLong )
{ this->resize(0); return (*this)(AL_LLong ); }
ZtCStringStd& operator=(double AD_Double)
{ this->resize(0); return (*this)(AD_Double); }
template<typename TPosList> void FindPosToList ///////////// template<typename TPosList> void FindPosToList /////////////
( (
@ -457,6 +485,13 @@ namespace ZNsMain
}/* }/*
ZtCStringStd& operator()(double AD_DoubleParam)*/ ZtCStringStd& operator()(double AD_DoubleParam)*/
int GetInt () const{return ZNsMain::ZftAtoI (this->data());}
ZTypLong GetLong () const{return ZNsMain::ZftAtoL (this->data());}
ZTypLLong GetLongLong() const{return ZNsMain::ZftAtoLL(this->data());}
ZTypLLong GetLLong () const{return ZNsMain::ZftAtoLL(this->data());}
double GetDouble () const{return ZNsMain::ZftAtoD (this->data());}
public: public:
};/* };/*
template template

View File

@ -21,6 +21,7 @@ namespace ZNsMain
typedef ZtCStringBase<char> ZCStringBase ; typedef ZtCStringBase<char> ZCStringBase ;
typedef ZtCStringBase<wchar_t> ZCStringBaseW ; typedef ZtCStringBase<wchar_t> ZCStringBaseW ;
typedef ZCStringBase ::ZCCharView ZCCharView ; typedef ZCStringBase ::ZCCharView ZCCharView ;
typedef ZCStringBaseW::ZCCharView ZCCharViewW ;
typedef ZtCCharType<ZCStringBase> ZCCharType ; typedef ZtCCharType<ZCStringBase> ZCCharType ;
typedef ZtCCharType<ZCStringBaseW> ZCCharTypeW ; typedef ZtCCharType<ZCStringBaseW> ZCCharTypeW ;
@ -61,19 +62,35 @@ namespace ZNsMain
ZCStringBaseW VO_ZCStringBaseW; ZCStringBaseW VO_ZCStringBaseW;
ZCStringStdW VO_ZCStringStdW ; ZCStringStdW VO_ZCStringStdW ;
VO_ZCStringBaseW(123); cout<<"# '.' ascii code ="<<int('.')<<endl;
cout<<"* after VO_ZCStringBaseW(123)"<<endl; cout<<"*****************************************************"<<endl;
VO_ZCStringBaseW=123;
cout<<"* after VO_ZCStringBaseW=123"<<endl;
cout<<"# VO_ZCStringBaseW[0]="<<int(VO_ZCStringBaseW[0])<<endl; cout<<"# VO_ZCStringBaseW[0]="<<int(VO_ZCStringBaseW[0])<<endl;
cout<<"# VO_ZCStringBaseW[1]="<<int(VO_ZCStringBaseW[1])<<endl; cout<<"# VO_ZCStringBaseW[1]="<<int(VO_ZCStringBaseW[1])<<endl;
cout<<"# VO_ZCStringBaseW[2]="<<int(VO_ZCStringBaseW[2])<<endl; cout<<"# VO_ZCStringBaseW[2]="<<int(VO_ZCStringBaseW[2])<<endl;
cout<<"*****************************************************"<<endl; cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringBaseW.GetLong()="<<VO_ZCStringBaseW.GetLong()<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCStringStdW(1.2); VO_ZCStringBaseW=2.3;
cout<<"* after VO_ZCStringStdW(1.2)"<<endl; cout<<"* after VO_ZCStringBaseW=2.3"<<endl;
cout<<"# VO_ZCStringBaseW[0]="<<int(VO_ZCStringBaseW[0])<<endl;
cout<<"# VO_ZCStringBaseW[1]="<<int(VO_ZCStringBaseW[1])<<endl;
cout<<"# VO_ZCStringBaseW[2]="<<int(VO_ZCStringBaseW[2])<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringBaseW.GetDouble()="<<VO_ZCStringBaseW.GetDouble()<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCStringStdW=1.2;
cout<<"* after VO_ZCStringStdW=1.2"<<endl;
cout<<"# VO_ZCStringStdW [0]="<<int(VO_ZCStringStdW[0])<<endl; cout<<"# VO_ZCStringStdW [0]="<<int(VO_ZCStringStdW[0])<<endl;
cout<<"# VO_ZCStringStdW [1]="<<int(VO_ZCStringStdW[1])<<endl; cout<<"# VO_ZCStringStdW [1]="<<int(VO_ZCStringStdW[1])<<endl;
cout<<"# VO_ZCStringStdW [2]="<<int(VO_ZCStringStdW[2])<<endl; cout<<"# VO_ZCStringStdW [2]="<<int(VO_ZCStringStdW[2])<<endl;
cout<<"*****************************************************"<<endl; cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringStdW.GetDouble()="<<VO_ZCStringStdW.GetDouble()<<endl;
cout<<"*****************************************************"<<endl;
const ZCCharView CO_ZCCharView("1234AA5678AA90abcAAss"); const ZCCharView CO_ZCCharView("1234AA5678AA90abcAAss");
@ -113,6 +130,7 @@ namespace ZNsMain
ZftMakeStr(VO_ZCStringStd, 1234); ZftMakeStr(VO_ZCStringStd, 1234);
ZftMakeStr(VO_ZCStringStd, ZCCharView("--"));
ZftMakeStr(VO_ZCStringStd, double(10.01)); ZftMakeStr(VO_ZCStringStd, double(10.01));
ZftMakeStr(VO_ZCStringStd, true); ZftMakeStr(VO_ZCStringStd, true);
ZftMakeStr(VO_ZCStringStd,'Z'); ZftMakeStr(VO_ZCStringStd,'Z');
@ -143,6 +161,11 @@ namespace ZNsMain
cout<<"# "<<VO_ZCStringStd<<endl; cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl; cout<<"*****************************************************"<<endl;
cout<<"* after ()(ZCCharViewW('_AZ'))"<<endl;
VO_ZCStringStd(ZCCharView("_AZ"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
return 0; return 0;
}/* }/*