• CXCommon.h工具类


    #ifndef __XCOMMON_H__
    #define __XCOMMON_H__
    /************************************************************************/
    //XCommon.h 是通用类,提供一些功能
    //1.字符串截断
    //2.坐标转换
    //3.文字乱码处理
    // 
    /************************************************************************/
    
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
    
    #include "iconv.h"
    
    #endif //#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
    
    /************************************************************************/
    /* 定义  define                                                         */
    /************************************************************************/
    #define FILENAME_LENGTH     64          //文件名长度
    #define FILEDES_LENGTH   256
    
    #define    CHAR_LENGTH 128            //字符串长度
    
    
    /////////////////////application////////////////////////////////////
    
    /************************************************************************/
    /* 常用方法                                                              */
    /************************************************************************/
    
    class ENGINE_API CXCommon
    {
    public:
        static CCRect getNodeRect(CCNode * pNode)
        {
            CCRect rc;
            rc.origin = pNode->getPosition();
            rc.size = pNode->getContentSize();
            rc.origin.x -= rc.size.width / 2;
            rc.origin.y -= rc.size.height / 2;
            return rc;
        }
    
        //转换坐标
        //锚点为(x,x)是的坐标转换成锚点为(0,0)的坐标
        //例如:把锚点(0.5,0.5)坐标(0,0)转换成
        //锚点(0.5,0.5)坐标(0 - pNode.getContentSize.width * 0.5,0 - pNode.getContentSize.Height * 0.5)
        static void anchorToLocalPos(CCNode* pNode)
        {
            pNode->setPositionX(pNode->getPositionX() + pNode->getContentSize().width * pNode->getAnchorPoint().x);
            pNode->setPositionY(pNode->getPositionY() + pNode->getContentSize().height * pNode->getAnchorPoint().y);
        }
        /***************************
        *函数名称:invariantPosConvertAnchor
        *函数功能:改变锚点,并且让原坐标保持不变
        *函数参数:CCNode* pNode--要改变的节点
                   CCPoint tAnchor--新的锚点
        *函数返回值:void
        *备注:
        ****************************/
        static void invariantPosConvertAnchor(CCNode* pNode, CCPoint tAnchor)
        {
            pNode->setPositionX(pNode->getPositionX() + pNode->getContentSize().width * (tAnchor.x - pNode->getAnchorPoint().x));
            pNode->setPositionY(pNode->getPositionY() + pNode->getContentSize().height * (tAnchor.y - pNode->getAnchorPoint().y));
            pNode->setAnchorPoint(tAnchor);
        }
    
        
        /***************************
        *函数名称:getAnchorCalibrationPos
        *函数功能:获取锚点(x,x)转换成锚点(0,0)后的坐标
        *函数参数:CCNode* pNode--要改变的节点
        *函数返回值:CCPoint通过新的锚点转换后的坐标
        *备注:这里getAnchorPoint所得到的锚点是新的锚点
        ****************************/
        static CCPoint getAnchorCalibrationPos(CCNode* pNode)
        {
            CCPoint tPoint;
            tPoint.x = pNode->getPositionX() + pNode->getContentSize().width * pNode->getAnchorPoint().x;
            tPoint.y = pNode->getPositionY() + pNode->getContentSize().height * pNode->getAnchorPoint().y;
            return tPoint;
        }
    
        
        /***************************
        *函数名称:distDiagonal
        *函数功能:求两个坐标点的距离
        *函数参数:const CCPoint& p1--端点坐标
                   const CCPoint& p2--端点坐标
        *函数返回值:两个坐标点之间的距离
        *备注:
        ****************************/
        static float distDiagonal(const CCPoint& p1, const CCPoint& p2)
        {
            float fX = p2.x - p1.x;
            float fY = p2.y - p1.y;
            return  sqrtf(fabs((fX * fX) + (fY * fY)));
        }
    
        //勾股定理
        static float pythagorean(float a, float b)
        {
            ASSERT(a >= 0); 
            ASSERT(b >= 0);
            return sqrt( a * a + b * b);
        }
    
    
        ////分割字符串 C
        //static void c_split(const char * str,const char * deli, vector<string> *list) 
        //{ 
        //    char buff[1024]; 
        //    snprintf(buff,sizeof(buff),str); 
        //    char * gg; 
        //    char *p = strtok_r(buff, deli, &gg);
        //
        //    list->clear(); 
        //    while(p !=NULL) 
        //    { 
        //        list->push_back(p); 
        //        p = strtok_r(NULL, deli, &gg); 
        //    }; 
        //}
    
        
        /***************************
        *函数名称:split
        *函数功能:分割字符串
        *函数参数:const string& src        要分割的字符串
                   const string& separator    分隔符,比如;或者空格等
                   vector<string>& dest        分割后的各个子串保存到这个向量当中
        *函数返回值:void
        *备注:
        ****************************/
        static void split(const string& src, const string& separator, vector<string>& dest)
        {
            string str = src;
            string substring;
            string::size_type start = 0, index;
    
            do
            {
                index = str.find_first_of(separator,start);
                if (index != string::npos)
                {    
                    substring = str.substr(start,index-start);
                    dest.push_back(substring);
                    start = str.find_first_not_of(separator,index);
                    if (start == string::npos) return;
                }
            }while(index != string::npos);
    
            //the last token
            substring = str.substr(start);
            dest.push_back(substring);
        }
    
    
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
    
        //编码转换
        //#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 
        //    string title = "成绩";
        //    GBK2UTF8(title,"gb2312","utf-8"); 
        //#endif 
        static int GBK2UTF8(std::string & gbkStr, const char* toCode, const char* fromCode)  
        {  
            iconv_t iconvH;  
            iconvH = iconv_open(fromCode, toCode);  
            if (iconvH == 0)  
            {  
                return -1;  
            }  
    
            const char* strChar = gbkStr.c_str();  
            const char** pin = &strChar;  
            size_t strLength = gbkStr.length();  
            char* outbuf = (char*) malloc(strLength*4);  
            char* pBuff = outbuf;  
    
            memset( outbuf, 0, strLength*4);  
            size_t outLength = strLength*4;  
            if (-1 == iconv(iconvH, pin, &strLength, &outbuf, &outLength))  
            {  
                iconv_close(iconvH);  
                return -1;  
            }  
            gbkStr = pBuff;  
            iconv_close(iconvH);  
            return 0;  
        }
    #endif //#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
    
        /***************************
        *函数名称:toString
        *函数功能:将int类型转化成string类型
        *函数参数:int nSrc--要转化的值
        *函数返回值:转化后的string值
        *备注:通过sprintf来转化,考虑到跨平台
        ****************************/
        static string toString(int nSrc)
        {
            char psStr[CHAR_LENGTH] = {0};
            sprintf(psStr, "%d", nSrc);
            return psStr;
        }
        /***************************
        *函数名称:toString
        *函数功能:将long long类型转化成string类型
        *函数参数:long long llSrc--要转化的值
        *函数返回值:转化后的string值
        *备注:通过sprintf来转化,考虑到跨平台
        ****************************/
        static string toString(long long llSrc)
        {
            char psStr[CHAR_LENGTH] = {0};
            sprintf(psStr, "%lld", llSrc);
            return psStr;
        }
        /***************************
        *函数名称:toString
        *函数功能:将float类型转化成string类型
        *函数参数:float fSrc--要转化的值
        *函数返回值:转化后的string值
        *备注:通过sprintf来转化,考虑到跨平台
        ****************************/
        static string toString(float fSrc)
        {
            char psStr[CHAR_LENGTH] = {0};
            sprintf(psStr, "%f", fSrc);
            return psStr;
        }
        /***************************
        *函数名称:toString
        *函数功能:将double类型转化成string类型
        *函数参数:double dSrc--要转化的值
        *函数返回值:转化后的string值
        *备注:通过sprintf来转化,考虑到跨平台
        ****************************/
        static string toString(double dSrc)
        {
            char psStr[CHAR_LENGTH] = {0};
            sprintf(psStr, "%f", dSrc);
            return psStr;
        }
    
    
    };
    
    #endif //__XCOMMON_H__
  • 相关阅读:
    算法学习(二)——树状数组求逆序数
    ZOJ 2412 Farm Irrigation
    排列的生成算法(一)
    汉诺塔递归实现
    汇编(五)
    汇编(四)
    汇编(三)
    汇编(二)
    0103MySQL中的B-tree索引 USINGWHERE和USING INDEX同时出现
    0103如何通过索引长度确定是否使用全索引
  • 原文地址:https://www.cnblogs.com/newlist/p/3154543.html
Copyright © 2020-2023  润新知