对于开发SMS初学者的,经常用到的几个函数。
发布时间:2006-10-14 3:03:09   收集提供:gaoqian

/*****************************************************************************
* 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;
}

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50