对于开发SMS初学者的,经常用到的几个函数。

发表于:2007-06-23来源:作者:点击数: 标签:
/***************************************************************************** * Class: Global Function * Function: to_MultiByte * Description: 把Unicode转换成多字节 * Parameters : char*strSM -- 要转换的Unicode缓冲 *intnLength -- Unicode缓

   

/*****************************************************************************
* Class      : Global Function
* Function   : to_MultiByte
* Description: 把Unicode转换成多字节

* Parameters : char*    strSM -- 要转换的Unicode缓冲
*              int    nLength -- Unicode缓冲的长度
* Return     : 转换后的多字节字串
* Input      :
* Output     :
* History    : Created by Rongdian  Monday, April 29, 2002   11:03:15
* Process    :
******************************************************************************/
CString to_MultiByte(char* strSM, int nLength){
    UINT nLen = 0;
    PBYTE lpszM;
    PBYTE lpszW = new BYTE[nLength];
    memcpy(lpszW, strSM, nLength);

    for(int i = 0; i < nLength/2; i++)
        *((unsigned short*)lpszW + i) = ntohs(*((unsigned short*)lpszW + i));

    nLen = WideCharToMultiByte(936, WC_COMPOSITECHECK,
            (const unsigned short*)lpszW, nLength/2, NULL, 0, NULL, NULL);

    lpszM = new BYTE[nLen+1];

    nLen = WideCharToMultiByte(936, WC_COMPOSITECHECK,
            (const unsigned short*)lpszW, nLength/2, (char*)lpszM, nLen, NULL, NULL);

    lpszM[nLen] = 0;
    CString csSM((LPCTSTR)lpszM, nLen);
    delete lpszM;
    delete lpszW;
    return csSM;
}
/*****************************************************************************
* Class      : Global Function
* Function   : to_UCS2
* Description: 把多字节转换成Unicode
* Parameters : char*    strSM -- -- 要转换的多字节缓冲
*              int    nLength -- 多字节缓冲的长度
* Return     : 转换后的Unicode字串
******************************************************************************/
CString to_UCS2(char* strSM, int nLength){
        CString csSM((LPCTSTR)strSM, nLength);
        
        PBYTE    lpszW = NULL;
        UINT    nLen = 0;

        nLen = MultiByteToWideChar(936, MB_PRECOMPOSED,
            (LPCTSTR)csSM, csSM.GetLength(), NULL, 0);

        lpszW = new BYTE[nLen * 2];

        nLen = MultiByteToWideChar(936, MB_PRECOMPOSED,
                (LPCTSTR)csSM, csSM.GetLength(), (LPWSTR)lpszW, nLen);

        for(UINT i = 0; i < nLen; i ++)
            *((unsigned short*)lpszW + i) = htons(*((unsigned short*)lpszW + i));

        CString csRet((LPCTSTR)lpszW, nLen * 2);
        delete lpszW;
        return csRet;
}

原文转自:http://www.ltesting.net