用串口 + WAVECOM WISMO2C2-G900/1800搞手机短信编程。用TEXT方式,利用AT命令发送英文短信息成功。可是TEXT方式无法发送中文短信!!!!!所以必须采用了PDU模式,可是PDU模式的编码我弄不明白。谁能把下面delphi对中文进行编码的代码帮我改成VC++的或者C、C++的?我不会DELPHI地
http://www.ccw.com.cn/htm/app/aprog/01_6_11_3.asp周一就要完活啊,上头压的紧啊

解决方案 »

  1.   

    //8位AscII到7位AscII转换函数
    //返回值:输出数据的长度(字节)
    int CCode::AscIIEtoS(LPCSTR lpEBuf,int nECount,LPBYTE lpSBuf)
    {
    BYTE byTemp;
    int j,i;
    i=0;
    if(nECount <= 0)
    return 0;
    for(j=0 ;j< nECount;j++)
    {
    //第8的整数个特殊处理
    if((j+1) %8 ==0)
    {
    i=0;
    *(lpSBuf+j)=0x00;
    continue;
    }
    //右移,高位留出补位位置
    *(lpSBuf+j) =*(lpEBuf+j) >> i;
    if(j == nECount -1)
    break;
    byTemp = *(lpEBuf+j+1);
    //取要添到前一字节的几位
    byTemp <<=(8-i-1);
    //合并
            *(lpSBuf+j) =*(lpSBuf+j) + byTemp;
    i++;
    }
    //去除移位流下的空位子,即0x00
    LPBYTE lpbTemp = new BYTE[nECount];
    memcpy(lpbTemp,lpSBuf,nECount);
    i=0;
        for(j=0;j< nECount;j++)

            //第8的整数个特殊处理    
            if((j+1) % 8 == 0)
    continue;
    *(lpSBuf+i) = *(lpbTemp+j);
    i++;
    }
    delete [] lpbTemp;
    memset(lpSBuf+i,0,nECount-i);
    return i;
    }
    //从GB2312到UCS2的转换函数
    //返回值是:转换结果的数量(以wchar计算)
    int CCode::GBToUCS2(LPCSTR lpGBBuf,int nGBCount,LPWSTR lpUCSBuf,int nUCSCount)
    {
    return MultiByteToWideChar(CP_ACP,     // code page
               MB_PRECOMPOSED,   // character-type options
          lpGBBuf, // string to map
               nGBCount, // number of bytes in string
                 lpUCSBuf,         // wide-character buffer
               nUCSCount         // size of buffer
            );
    }
      

  2.   

    //7位AscII到8位AscII转换函数
    //返回值:输出数据的长度(字节)
    int CCode::AscIIStoE(const LPBYTE lpSBuf,int nSCount,LPSTR lpEBuf)
    {
    BYTE bySrc[8];
    BYTE by1;
    int i,n;
    int j=0;                 //lpSBuf 记数
    int k=0;                 //lpEBuf 记数 
    BOOL bExit = FALSE;      //退出标志
        while(1) 
    {
    for(i=0;i<8;i++)
    {
    if(j > nSCount -1)
    {
    bExit = TRUE;
    break;
    }
    else
    if(i == 7)
    bySrc[i] = 0x00;
    else
    {
         bySrc[i] = * (lpSBuf+j);
        j++;
    }
    }
        n=i;
    if(n == 7)
    n++;
    for(i=0;i<n;i++)
    {
    if(i != 0)
    {
    by1 = bySrc[i];
        by1 = by1 << (i+1);
    by1 = by1 >> 1;
            by1 = by1 + (bySrc[i-1] >> (8-i));
        * (lpEBuf + k) = by1;
    }
    else
    * (lpEBuf + k) = bySrc[i] & 0x7F;      //01111111
    k++;
    }
    if(bExit)
    {
                * (lpEBuf + k) = '\0';
      break;
    }
    }
    return k;
    }
    int CCode::UCS2ToGB(LPBYTE lpUCSBuf,int nByteCount,LPSTR lpGBBuf,int nGBCount)
    {
    //先要把字节数组 lpUCSBuf 变成宽字符数组
    int i,nResult;
    LPWSTR lpNewUCSBuf = new unsigned short[nByteCount/2];
    for(i=0;i<nByteCount/2;i++)
    {
    * (lpNewUCSBuf +i) = * (lpUCSBuf +2*i);
            * (lpNewUCSBuf +i) <<= 8;
            * (lpNewUCSBuf +i) += * (lpUCSBuf +2*i+1);
    }
    nResult = WideCharToMultiByte(CP_ACP,         
                           WC_COMPOSITECHECK,  
       lpNewUCSBuf,
       nByteCount/2,
       lpGBBuf,
       nGBCount,
       NULL,
       NULL
       );
    delete [] lpNewUCSBuf;
    return nResult;
    }这四个函数足以完成编解码的工作
    要注意,消息中只要含有GB字符,就全要按汉字来处理
      

  3.   

    http://vip.6to23.com/NowCan1/misc/sms.zip
    password:www.delphibaby.com
      

  4.   

    诸位,我找到一个强大地SMS手机短信库:
    http://www.pxh.de/fs/gsmlib/
    (在编译库库的时候你需要把/O2的C/C++优化项去掉,否则有C1001错误。)
    其中一个SMS SENDER完全满足了我的需求:
    http://www.pxh.de/fs/gsmlib/doc/index.html
    可是我运行这个程序smssender -d COM1 -t 9600 1303xxxxxxx "中文SMS"<CR>结果对方手机上显示为空。SMS是收到了·#¥%·#¥%!谁帮我看看那个库?大家一起研究一下如何利用那个库发送中文短信息?这个库实在是太强大了,什么功能都有。
      

  5.   

    老外的东西不可能支持汉字!“SMS是收到了·#¥%·#¥%”是编码方式的问题!发送汉字要使用UCS2编码
      

  6.   

    我沒有做過
    不知道可不可以用unicode.
      

  7.   

    NowCan:  你的资料太好啦,我的QQ是1819625
                      msn messager是[email protected]
      

  8.   

    qsfsea(空中梦想家) :   到底是      TEXT MODE + UCS2的消息内容
      
       还是      PDU MODE + 编码过的UCS2短消息内容   支持中文啊?
      

  9.   

    TEXT MODE 我没做过PDU MODE + 编码过的UCS2短消息内容  YES
      

  10.   

    WAVECOM WISMO2C2-G900/1800 是不是一个无线modem?
      

  11.   

    javanew: 不是啊,有线的,接到com口