#ifndef CUTIL_H
#define CUTIL_H
#include <string>
#include <vector>
#ifdef USE_QT
#include <QString>
class CUtil
{
public:
CUtil();
virtual ~CUtil();
enum ENDIAN
{
ENDIAN_BIG,
ENDIAN_LITTLE
};
//toString overRide
static QString toString(char target);
static QString toString(uchar target);
static QString toString(short target);
static QString toString(ushort target);
static QString toString(int target);
static QString toString(uint target);
static QString toString(double target);
static QString hexaToString(char target);
static QString hexaToString(uchar target);
static QString hexaToString(short target, CUtil::ENDIAN endian = ENDIAN_BIG);
static QString hexaToString(ushort target, CUtil::ENDIAN endian = ENDIAN_BIG);
static QString hexaToString(int target, CUtil::ENDIAN endian = ENDIAN_BIG);
static QString hexaToString(uint target, CUtil::ENDIAN endian = ENDIAN_BIG);
//typecast
static QString ucharArrayToString(uchar* str);
static QString ucharArrayToString(uCharArrayStream& stream);
static void messageBox(const char *str);
static void messageBox(const uchar *str);
};
#else
class CUtil
{
public:
CUtil();
virtual ~CUtil();
enum ENDIAN
{
ENDIAN_BIG,
ENDIAN_LITTLE
};
//toString overRide
static std::string toString(char target);
static std::string toString(uchar target);
static std::string toString(short target);
static std::string toString(ushort target);
static std::string toString(int target);
static std::string toString(uint target);
static std::string toString(double target);
static std::string hexaToString(char target, CUtil::ENDIAN endian = ENDIAN_BIG);
static std::string hexaToString(uchar target, CUtil::ENDIAN endian = ENDIAN_BIG);
static std::string hexaToString(short target, CUtil::ENDIAN endian = ENDIAN_BIG);
static std::string hexaToString(ushort target, CUtil::ENDIAN endian = ENDIAN_BIG);
static std::string hexaToString(int target, CUtil::ENDIAN endian = ENDIAN_BIG);
static std::string hexaToString(uint target, CUtil::ENDIAN endian = ENDIAN_BIG);
//typecast
static std::string ucharArrayToString(uchar* str);
static std::string ucharArrayToString(uCharArrayStream& stream);
};
#endif /* USE_QT */
#endif // CUTIL_H
//네임스페이스가 있었는데 그냥 쓰는사람이 불편할까봐 빼부럿다-ㅁ-
#include "CUtil.h"
// Creater : sp.Park by SystemDevelopment
// Description : Public C++ 11 Util Class
// Created Date : 2017-08-17
// Modify Date : 2017-11-07 USE_QT Macro Addtional
#ifdef USE_QT
#include <QMessageBox>
QString CUtil::toString(char target)
{
QString retValue;
retValue.push_back(target);
return retValue;
}
QString CUtil::toString(uchar target)
{
QString retValue;
retValue.push_back(target);
return retValue;
}
QString CUtil::toString(short target)
{
QString retValue;
retValue = QString::number(target);
return retValue;
}
QString CUtil::toString(ushort target)
{
QString retValue;
retValue = QString::number(target);
return retValue;
}
QString CUtil::toString(int target)
{
QString retValue;
retValue = QString::number(target);
return retValue;
}
QString CUtil::toString(uint target)
{
QString retValue;
retValue = QString::number(target);
return retValue;
}
QString CUtil::toString(double target)
{
QString retValue;
retValue = QString::number(target);
return retValue;
}
QString CUtil::hexaToString(char target)
{
QString retValue;
retValue.sprintf("%02x", target);
return retValue;
}
QString CUtil::hexaToString(uchar target)
{
QString retValue;
retValue.sprintf("%02x", target);
return retValue;
}
QString CUtil::hexaToString(short target, ENDIAN endian)
{
QString retValue;
uchar targetBuf[2] = { 0, };
uchar* targetPtr = (uchar*)⌖
if (endian == ENDIAN_BIG)
{
targetBuf[0] = targetPtr[1];
targetBuf[1] = targetPtr[0];
}
else
{
targetBuf[0] = targetPtr[0];
targetBuf[1] = targetPtr[1];
}
retValue.sprintf("%02x%02x", targetBuf[0], targetBuf[1]);
return retValue;
}
QString CUtil::hexaToString(ushort target, ENDIAN endian)
{
QString retValue;
uchar targetBuf[2] = { 0, };
uchar* targetPtr = (uchar*)⌖
if (endian == ENDIAN_BIG)
{
targetBuf[0] = targetPtr[1];
targetBuf[1] = targetPtr[0];
}
else
{
targetBuf[0] = targetPtr[0];
targetBuf[1] = targetPtr[1];
}
retValue.sprintf("%02x%02x", targetBuf[0], targetBuf[1]);
return retValue;
}
QString CUtil::hexaToString(int target, ENDIAN endian)
{
QString retValue;
uchar targetBuf[4] = { 0, };
uchar* targetPtr = (uchar*)⌖
if (endian == ENDIAN_BIG)
{
targetBuf[0] = targetPtr[3];
targetBuf[1] = targetPtr[2];
targetBuf[2] = targetPtr[1];
targetBuf[3] = targetPtr[0];
}
else
{
targetBuf[0] = targetPtr[0];
targetBuf[1] = targetPtr[1];
targetBuf[2] = targetPtr[2];
targetBuf[3] = targetPtr[3];
}
retValue.sprintf("%02x%02x%02x%02x", targetBuf[0], targetBuf[1], targetBuf[2], targetBuf[3]);
return retValue;
}
QString CUtil::hexaToString(uint target, ENDIAN endian)
{
QString retValue;
uchar targetBuf[4] = { 0, };
uchar* targetPtr = (uchar*)⌖
if (endian == ENDIAN_BIG)
{
targetBuf[0] = targetPtr[3];
targetBuf[1] = targetPtr[2];
targetBuf[2] = targetPtr[1];
targetBuf[3] = targetPtr[0];
}
else
{
targetBuf[0] = targetPtr[0];
targetBuf[1] = targetPtr[1];
targetBuf[2] = targetPtr[2];
targetBuf[3] = targetPtr[3];
}
retValue.sprintf("%02x%02x%02x%02x", targetBuf[0], targetBuf[1], targetBuf[2], targetBuf[3]);
return retValue;
}
//typecast
QString ucharArrayToString(uchar* str)
{
QString retValue((char*)str);
return retValue;
}
QString ucharArrayToString(uCharArrayStream& stream)
{
QString retValue((char*)stream.constData());
return retValue;
}
#else
using namespace std;
NS_SUGENTECH_BEGIN
//다른 타입을 std::string 객체로 변환
string CUtil::toString(char target)
{
string str;
str.push_back(target);
return str;
}
string CUtil::toString(uchar target)
{
string str;
str.push_back((char)target);
return str;
}
string CUtil::toString(short target)
{
string str ;
char buf[256] = { 0, };
#ifdef _WIN32
sprintf_s(buf, "%d", target);
#else
sprintf(buf, "%d", target);
#endif
str = buf;
return str;
}
string CUtil::toString(ushort target)
{
string str;
char buf[256] = { 0, };
#ifdef _WIN32
sprintf_s(buf, "%d", target);
#else
sprintf(buf, "%d", target);
#endif
str = buf;
return str;
}
string CUtil::toString(int target)
{
string str;
char buf[256] = { 0, };
#ifdef _WIN32
sprintf_s(buf, "%d", target);
#else
sprintf(buf, "%d", target);
#endif
str = buf;
return str;
}
string CUtil::toString(uint target)
{
string str;
char buf[256] = { 0, };
#ifdef _WIN32
sprintf_s(buf, "%u", target);
#else
sprintf(buf, "%u", target);
#endif
str = buf;
return str;
}
string CUtil::toString(double target)
{
string str;
char buf[256] = { 0, };
#ifdef _WIN32
sprintf_s(buf, "%lf", target);
#else
sprintf(buf, "%lf", target);
#endif
str = buf;
return str;
}
//16진수 변환 함수 (다른타입을 std::string으로변환)
string CUtil::hexaToString(char target, CUtil::ENDIAN endian)
{
string str;
char buf[256] = { 0, };
#ifdef _WIN32
sprintf_s(buf, "%02x", target);
#else
sprintf(buf, "%02x", target);
#endif
str = buf;
return str;
}
string CUtil::hexaToString(uchar target, CUtil::ENDIAN endian)
{
string str;
char buf[256] = { 0, };
#ifdef _WIN32
sprintf_s(buf, "%02x", target);
#else
sprintf(buf, "%02x", target);
#endif
str = buf;
return str;
}
string CUtil::hexaToString(short target, CUtil::ENDIAN endian)
{
string str;
char buf[256] = { 0, };
uchar targetBuf[2] = { 0, };
uchar* targetPtr = (uchar*)⌖
if (endian == ENDIAN_BIG)
{
targetBuf[0] = targetPtr[1];
targetBuf[1] = targetPtr[0];
}
else
{
targetBuf[0] = targetPtr[0];
targetBuf[1] = targetPtr[1];
}
#ifdef _WIN32
sprintf_s(buf, "%02x%02x", targetBuf[0], targetBuf[1]);
#else
sprintf(buf, "%02x%02x", targetBuf[0], targetBuf[1]);
#endif
str = buf;
return str;
}
string CUtil::hexaToString(ushort target, CUtil::ENDIAN endian)
{
string str;
char buf[256] = { 0, };
uchar targetBuf[2] = { 0, };
uchar* targetPtr = (uchar*)⌖
if (endian == ENDIAN_BIG)
{
targetBuf[0] = targetPtr[1];
targetBuf[1] = targetPtr[0];
}
else
{
targetBuf[0] = targetPtr[0];
targetBuf[1] = targetPtr[1];
}
#ifdef _WIN32
sprintf_s(buf, "%02x%02x", targetBuf[0], targetBuf[1]);
#else
sprintf(buf, "%02x%02x", targetBuf[0], targetBuf[1]);
#endif
str = buf;
return str;
}
string CUtil::hexaToString(int target, CUtil::ENDIAN endian)
{
string str;
char buf[256] = { 0, };
uchar targetBuf[4] = { 0, };
uchar* targetPtr = (uchar*)⌖
if (endian == ENDIAN_BIG)
{
targetBuf[0] = targetPtr[3];
targetBuf[1] = targetPtr[2];
targetBuf[2] = targetPtr[1];
targetBuf[3] = targetPtr[0];
}
else
{
targetBuf[0] = targetPtr[0];
targetBuf[1] = targetPtr[1];
targetBuf[2] = targetPtr[2];
targetBuf[3] = targetPtr[3];
}
#ifdef _WIN32
sprintf_s(buf, "%02x%02x%02x%02x", targetBuf[0], targetBuf[1], targetBuf[2], targetBuf[3]);
#else
sprintf(buf, "%02x%02x%02x%02x", targetBuf[0], targetBuf[1], targetBuf[2], targetBuf[3]);
#endif
str = buf;
return str;
}
string CUtil::hexaToString(uint target, CUtil::ENDIAN endian)
{
string str;
char buf[256] = { 0, };
uchar targetBuf[4] = { 0, };
uchar* targetPtr = (uchar*)⌖
if (endian == ENDIAN_BIG)
{
targetBuf[0] = targetPtr[3];
targetBuf[1] = targetPtr[2];
targetBuf[2] = targetPtr[1];
targetBuf[3] = targetPtr[0];
}
else
{
targetBuf[0] = targetPtr[0];
targetBuf[1] = targetPtr[1];
targetBuf[2] = targetPtr[2];
targetBuf[3] = targetPtr[3];
}
#ifdef _WIN32
sprintf_s(buf, "%02x%02x%02x%02x", targetBuf[0], targetBuf[1], targetBuf[2], targetBuf[3]);
#else
sprintf(buf, "%02x%02x%02x%02x", targetBuf[0], targetBuf[1], targetBuf[2], targetBuf[3]);
#endif
str = buf;
return str;
}
#endif
#ifdef USE_QT
void CUtil::messageBox(const char* str)
{
QMessageBox msgBox;
msgBox.setText(str);
msgBox.exec();
}
void CUtil::messageBox(const uchar *str)
{
QMessageBox msgBox;
msgBox.setText((char*)str);
msgBox.exec();
}
#endif