zoukankan      html  css  js  c++  java
  • 字符串转换封装类

    #include <memory>
    //定义Stl字符串类型,自动调用对应的类型
    #ifdef UNICODE
    #define StlString std::wstring 
    #else
    #define StlString std::string
    #endif
    
    class PLSimLocale
    {
    public:
        PLSimLocale();
        ~PLSimLocale();
        static void UTF8ToUnicode(const char* UTF8, std::wstring& unicodeString);
        static std::string  WStringToString(const std::wstring& str);
        static std::wstring StringToWString(const std::string& str);
        static std::wstring CStringToWString(const CStringA& str);
        static StlString CStringAToStlString(const CStringA& str);
        static StlString CStringToStlString(const CString& str);
        static StlString StringToStlString(const std::string& str);
        static CStringA CStringWToCStringA(const CStringW& str);
        static CStringA CStringToCStringA(const CString& str);
        static std::string StlStringToString(const StlString& str);
        static std::wstring StlStringToWString(const StlString& str);
        static StlString WStringToStlString(const std::wstring& str);
        static std::string GetCurrentDateTime(std::string strFormat = "" );
    
    };
    #include "stdafx.h"
    #include "PLSimLocale.h"
    #include <sstream>
    
    PLSimLocale::PLSimLocale()
    {
    }
    
    
    PLSimLocale::~PLSimLocale()
    {
    }
    
    
    void PLSimLocale::UTF8ToUnicode(const char* UTF8, std::wstring& unicodeString)
    {
        DWORD dwUnicodeLen;        //转换后Unicode的长度
        WCHAR *pwText;            //保存Unicode的指针
       
        //获得转换后的长度,并分配内存
    
        dwUnicodeLen = MultiByteToWideChar(CP_UTF8, 0, UTF8, -1, NULL, 0);
        pwText = new WCHAR[dwUnicodeLen];
        if (!pwText)
        {
            return;
        }
        //转为Unicode
        MultiByteToWideChar(CP_UTF8, 0, UTF8, -1, pwText, dwUnicodeLen);
    
        //转为CString
        unicodeString = pwText;
       
        //清除内存
        delete[] pwText;
    
        //返回
        return;
    }
    
    
    std::string PLSimLocale::WStringToString(const std::wstring& str)
    {
        unsigned int len = str.size() * 2 + 2;
        setlocale(LC_CTYPE, "");
        char * p = new char[len];
        size_t intlen;
    
        wcstombs_s(&intlen, p, len, str.c_str(), len);
        std::string str1(p);
        delete[] p;
        return str1;
    }
    
    
    std::wstring PLSimLocale::StringToWString(const std::string& str)
    {
        unsigned int len = str.size() + 1;
        setlocale(LC_CTYPE, "");
        wchar_t *p = new wchar_t[len];
        size_t intlen;
    
        mbstowcs_s(&intlen, p, len, str.c_str(), _TRUNCATE);
        std::wstring str1(p);
        delete[] p;
        return str1;
    }
    
    std::wstring PLSimLocale::CStringToWString(const CStringA& str)
    {
        unsigned int len = str.GetLength() + 1;
        setlocale(LC_CTYPE, "");
        wchar_t *p = new wchar_t[len];
        size_t intlen;
    
        mbstowcs_s(&intlen, p, len, str.GetString(), _TRUNCATE);
        std::wstring str1(p);
        delete[] p;
        return str1;
    }
    
    CStringA PLSimLocale::CStringToCStringA(const CString& str)
    {
    #ifdef UNICODE
        return CStringWToCStringA(str);
    #else
        return str;
    #endif
    
    }
    StlString PLSimLocale::CStringAToStlString(const CStringA& str)
    {
    #ifdef UNICODE
        return CStringToWString(str.GetString());
    #else
        return StlString(str.GetString());
    #endif
    }
    
    StlString PLSimLocale::StringToStlString(const std::string& str)
    {
    #ifdef UNICODE
        return StringToWString(str);
    #else
        return str;
    #endif
    
    }
    
    CStringA PLSimLocale::CStringWToCStringA(const CStringW & str)
    {
        int len = WideCharToMultiByte(CP_ACP, 0,str, -1, NULL, 0, NULL, NULL);
        std::shared_ptr<char> pstrLocal(new char[len], std::default_delete<char[]>());
        memset(pstrLocal.get(), 0, len * sizeof(char));
        WideCharToMultiByte(CP_ACP, 0, str, -1, pstrLocal.get(), len, NULL, NULL);
        CStringA cstr = pstrLocal.get();
        return cstr;  
    }
    
    
    std::string PLSimLocale::StlStringToString(const StlString& str)
    {
    #ifdef UNICODE
        return WStringToString(str);
    #else
        return str;
    #endif
    }
    
    std::wstring PLSimLocale::StlStringToWString(const StlString& str)
    {
    #ifdef UNICODE
        return str;
    #else
        return StringToWString(str);
    #endif
    }
    
    StlString PLSimLocale::WStringToStlString(const std::wstring& str)
    {
    #ifdef UNICODE
        return str;
    #else
        return WStringToString(str);
    #endif
    }
    
    StlString PLSimLocale::CStringToStlString(const CString& str)
    {
       return StlString(str.GetString());
    }
    
    std::string PLSimLocale::GetCurrentDateTime(std::string strFormat)
    {
        SYSTEMTIME sys;
        GetLocalTime(&sys);
        char szTime[20] = { 0 };
        if (strFormat.length() == 0 )
        {
            strFormat = "%d%d%d%d%d%d%d";
        }
        printf_s(szTime, sizeof(szTime) / sizeof(szTime[0]), strFormat, sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);
        return szTime;
    }
    
    
    std::string PLSimDataTypeConverter::IntToString(int i)
    {
        std::ostringstream ostream;
        ostream << static_cast<int>(i) << std::endl;
        return ostream.str();
    }
  • 相关阅读:
    mysql 5.7修改密码
    使用zfs进行pg的pitr恢复测试
    什么是构造函数?它和普通函数的区别?
    匿名函数和普通函数的区别
    http缓存机制
    全局变量和局部变量
    什么是web语义化?
    ajax状态值和状态码
    如何理解MVVM?
    如果理解&&运算符和各类数值的布尔值
  • 原文地址:https://www.cnblogs.com/ye-ming/p/8797439.html
Copyright © 2011-2022 走看看