Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
220 lines
5.0 KiB
C++
220 lines
5.0 KiB
C++
#ifndef _MATH_CONVERT_INLINE_H_
|
||
#define _MATH_CONVERT_INLINE_H_
|
||
|
||
#include <cstdlib>
|
||
#include <tchar.h>
|
||
|
||
inline void Math::Convert::Hex08ToStr( TCHAR *szDest, BYTE hex )
|
||
{
|
||
*((WORD *) szDest) = m_FastHeToBi[ hex ]; szDest += 2;
|
||
*(szDest) = '\0';
|
||
}
|
||
|
||
inline void Math::Convert::Hex16ToStr( TCHAR *szDest, WORD hex )
|
||
{
|
||
LPBYTE pSrc = (LPBYTE) &hex;
|
||
|
||
#ifdef BIG_ENDIAN
|
||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||
#else
|
||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||
#endif
|
||
*(szDest + 4) = '\0';
|
||
}
|
||
|
||
inline void Math::Convert::Hex32ToStr( TCHAR *szDest, unsigned long hex )
|
||
{
|
||
LPBYTE pSrc = (LPBYTE) &hex;
|
||
|
||
#ifdef BIG_ENDIAN
|
||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 4)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 6)) = m_FastHeToBi[ *(pSrc++) ];
|
||
#else
|
||
*((WORD *) (szDest + 6)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 4)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||
#endif
|
||
*(szDest + 8) = '\0';
|
||
}
|
||
|
||
inline void Math::Convert::Hex64ToStr( TCHAR *szDest, DWORD64 hex )
|
||
{
|
||
LPBYTE pSrc = (LPBYTE) &hex;
|
||
|
||
#ifdef BIG_ENDIAN
|
||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 4)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 6)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 8)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 10)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 12)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 14)) = m_FastHeToBi[ *(pSrc++) ];
|
||
#else
|
||
*((WORD *) (szDest + 14)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 12)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 10)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 8)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 6)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 4)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 2)) = m_FastHeToBi[ *(pSrc++) ];
|
||
*((WORD *) (szDest + 0)) = m_FastHeToBi[ *(pSrc++) ];
|
||
#endif
|
||
*(szDest + 16) = '\0';
|
||
}
|
||
|
||
|
||
//
|
||
// this function returns the equivalent binary value for an individual character specified in the ascii format
|
||
inline TCHAR Math::Convert::BiToHe(TCHAR cBin)
|
||
{
|
||
if((cBin >= '0') && (cBin <= '9'))
|
||
{
|
||
return (cBin - '0');
|
||
}
|
||
else if((cBin >= 'A') && (cBin <= 'F'))
|
||
{
|
||
return (cBin - 'A' + 0xA);
|
||
}
|
||
if((cBin >= 'a') && (cBin <= 'f'))
|
||
{
|
||
return (cBin -'a' + 0xA);
|
||
}
|
||
|
||
return cBin;
|
||
}
|
||
|
||
inline void Math::Convert::AcToHe(char *szDst, char *szSrc, int iCount)
|
||
{
|
||
while(iCount--)
|
||
{
|
||
*szDst = BiToHe(*szSrc) << 4;
|
||
*szSrc++;
|
||
*szDst += BiToHe(*szSrc);
|
||
*szSrc++;
|
||
*szDst++;
|
||
}
|
||
}
|
||
|
||
inline BYTE Math::Convert::StrToHex08(const TCHAR *szSrc)
|
||
{
|
||
const TCHAR* pStart = szSrc + 2;
|
||
BYTE cHex = 0;
|
||
|
||
TCHAR c1, c2;
|
||
|
||
for (int i=0; i<1; ++i)
|
||
{
|
||
c1 = BiToHe(*pStart++);
|
||
c1 <<= (8*(7-i)+4);
|
||
|
||
c2 = BiToHe(*pStart++);
|
||
c2 <<= (8*(7-i));
|
||
|
||
cHex += (c1 + c2);
|
||
}
|
||
|
||
return cHex;
|
||
}
|
||
|
||
inline WORD Math::Convert::StrToHex16(const TCHAR *szSrc)
|
||
{
|
||
const TCHAR* pStart = szSrc + 2;
|
||
WORD sHex = 0;
|
||
|
||
for (int i=0; i<2; i++)
|
||
{
|
||
WORD s1 = BiToHe(*pStart++);
|
||
s1 <<= (8*(1-i)+4);
|
||
|
||
WORD s2 = BiToHe(*pStart++);
|
||
s2 <<= (8*(1-i));
|
||
|
||
WORD sRet = s1 + s2;
|
||
sHex += sRet;
|
||
}
|
||
|
||
return sHex;
|
||
|
||
}
|
||
|
||
// convert string to hexadecimal value
|
||
inline unsigned long Math::Convert::StrToHex32(const TCHAR *szSrc)
|
||
{
|
||
const TCHAR* pStart = szSrc + 2;
|
||
unsigned long nHex = 0;
|
||
|
||
|
||
for (int i=0; i<4; i++)
|
||
{
|
||
unsigned long n1 = BiToHe(*pStart++);
|
||
n1 <<= (8*(3-i)+4);
|
||
|
||
unsigned long n2 = BiToHe(*pStart++);
|
||
n2 <<= (8*(3-i));
|
||
|
||
unsigned long nRet = n1 + n2;
|
||
nHex += nRet;
|
||
|
||
}
|
||
|
||
return nHex;
|
||
}
|
||
|
||
// convert string to hexadecimal value
|
||
inline DWORD64 Math::Convert::StrToHex64(const TCHAR *szSrc)
|
||
{
|
||
const TCHAR* pStart = szSrc + 2;
|
||
DWORD64 dlHex = 0;
|
||
|
||
for (int i=0; i<8; i++)
|
||
{
|
||
DWORD64 dl1 = BiToHe(*pStart++);
|
||
dl1 <<= (8*(7-i)+4);
|
||
|
||
DWORD64 dl2 = BiToHe(*pStart++);
|
||
dl2 <<= (8*(7-i));
|
||
|
||
DWORD64 dlRet = dl1 + dl2;
|
||
dlHex += dlRet;
|
||
|
||
}
|
||
return dlHex;
|
||
}
|
||
|
||
|
||
inline BYTE Math::Convert::Atoc(const TCHAR *szSrc)
|
||
{
|
||
return (0 == _tcsncmp(szSrc, _T("0x"), 2)) ? StrToHex08(szSrc) : (BYTE) _ttol(szSrc);
|
||
}
|
||
|
||
//
|
||
// TCHAR *<2A><> <20><>Ĩ<EFBFBD>ô<EFBFBD>! (By Standil)
|
||
//
|
||
inline WORD Math::Convert::Atos(const TCHAR *szSrc)
|
||
{
|
||
return (0 == _tcsncmp(szSrc, _T("0x"), 2)) ? StrToHex16(szSrc) : _ttoi(szSrc);
|
||
}
|
||
|
||
//
|
||
// TCHAR *<2A><> <20><>Ĩ<EFBFBD>ô<EFBFBD>! (By Standil)
|
||
//
|
||
inline unsigned long Math::Convert::Atoi(const TCHAR *szSrc)
|
||
{
|
||
return (0 == _tcsncmp(szSrc, _T("0x"), 2)) ? StrToHex32(szSrc) : _ttol(szSrc);
|
||
}
|
||
|
||
//
|
||
// TCHAR *<2A><> <20><>Ĩ<EFBFBD>ô<EFBFBD>! (By Standil)
|
||
//
|
||
inline DWORD64 Math::Convert::Atol64(const TCHAR *szSrc)
|
||
{
|
||
return (0 == _tcsncmp(szSrc, _T("0x"), 2)) ? StrToHex64(szSrc) : _ttoi64(szSrc);
|
||
}
|
||
|
||
#endif |