手机短信息SMS开发—编码,解码

原创 2002年08月14日 11:15:00

手机短信息SMS开发编码,解码

1、  英文编码

缺省的GSM字符集为7位编码,ASCII码为8位编码,编码就是将8ASCII编码转换为7位编码。

例如:1234 编码后得到31D98C06<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

2进制表示

8位编码 00110001 00110010 00110011 00110100

7位编码 00110001 11011001 10001100 00000110

通过例子可以看出,将ascii8位编码的Bit8去掉,依次将下7位编码的后几位逐次移到前面,形成新的8位编码。

以下是C++Builder的实现代码:

String __stdcall EncodeEnglish(String InputStr)

{

        int n,len,cur;

        String tempstr,returnstr;

        unsigned char mid1[2],mid2[2];

        len=InputStr.Length();

        n=0;

        for(int i=1;i<=len;i++)

        {

           if (i

           {

             strcpy(mid1,InputStr.SubString(i,1).c_str());

             strcpy(mid2,InputStr.SubString(i+1,1).c_str());

             cur=(mid1[0]>>n)|((mid2[0]<<(7-n))& 0xff);

           }

           else

           {

             strcpy(mid1,InputStr.SubString(i,1).c_str());

             cur=(mid1[0]>>n)& 0x7f;

           }

           FmtStr(tempstr,"%2.2X",ARRAYOFCONST((cur)));

           returnstr=returnstr+tempstr;

           n=(n+1)%7;

           if (n==0)

                   i++;

             }

return returnstr;

}

2、  英文解码

简单地说就是将7位字符编码转换为8为字符编码

以下是C++Builder的实现代码:

int ReturnHex(int Value)

{

        switch (Value)

        {

          case 0:

                Value=0x7f;

                break;

          case 1:

                Value=0x3f;

                break;

          case 2:

                Value=0x1f;

                break;

          case 3:

                Value=0x0f;

                break;

          case 4:

                Value=0x07;

                break;

          case 5:

                Value=0x03;

                break;

          case 6:

                Value=0x01;

                break;

          case 7:

                Value=0x00;

                break;

        }

        return Value;

}

String __stdcall DecodeEnglish (String InputStr)

{

        unsigned char InStr[300];

        char OutStr[300];

        String str;

        int j=0,i=0;

        int Point=0;

        int temp;

        memset(InStr,0,301);

        memset(OutStr,0,301);

        for(int i=0;i

        {

                str="0x"+InputStr.SubString(i+1,2);

                InStr[i/2]=StrToInt(str);

        }

        while(j<=InputStr.Length()/2)

        {

                if(Point==0)

                        OutStr[i]=InStr[j]&ReturnHex(Point);

                else

OutStr[i]=((InStr[j]&ReturnHex(Point))<>(8-Point));

                if(Point%7==0&&Point!=0)

                        Point=0;

                else

                        Point=Point+1;

                i++;

                j=i-(i/8);

 

        }

        OutStr[12]=((InStr[12]&0x07)<<5)|(InStr[11]>>(8-5));

        return AnsiString(OutStr);

}

3、  中文编码

中文编码较为简单,就是将GB2312的中文编码转换为代码页为CP936Unicode编码即可

以下是C++Builder的实现代码

String  EncodeChinese(String InputStr)

{

             int cur;

String tempstr,returnstr;

WideString ws;

wchar_t  mid[2];

ws=WideString(InputStr);

for(int i=1;i<=ws.Length();i++)

{

wcscpy(mid,ws.SubString(i,1).c_bstr());

cur=mid[0];

FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));

returnstr=returnstr+tempstr;

}

return returnstr;

}

4、  中文解码

将代码页为CP936Unicode编码转换为GB2312的中文编码即可

 

以下是C++Builder的实现代码

String  DecodeChinese(String InputStr)

{

        wchar_t Buf[300];

        for(int i=0;i

        {

                Buf[i/4]=StrToInt("0x"+InputStr.SubString(i+1,4));

        }

        Buf[InputStr.Length()/4]=0;

        return WideCharToString(Buf);

}

薛长宇

changning@ynmail.com

redpower2004@21cn.com

2001-8-7

BCB 手机短信息SMS开发—编码,解码

手机短信息SMS开发—编码,解码 作者:ChangNing(Redpower) 更新时间: 200...
  • JacksonLiang
  • JacksonLiang
  • 2006年09月06日 15:03
  • 1035

手机短信息SMS开发—编码,解码

  选择自 redpower 的 Blog 手机短信息SMS开发—编码,解码1、  英文编码缺省的GSM字符集为7位编码,ASCII码为8位编码,编码就是将8位ASCII编码转换为7位编码。例如:1...
  • bishopinred
  • bishopinred
  • 2005年04月06日 14:25
  • 1029

手机短信息SMS开发—编码和解码

http://www.yesky.com/20020701/1618435_1.shtml
  • mylhw
  • mylhw
  • 2005年04月22日 08:51
  • 552

SMS格式编码与解码

注:本文转载自网络,忘记具体网址,可百度搜索! 1.短信格式的编码主要是有两种一个是text格式的,明文不用解码一看就懂,一个是PDU格式的,国内的都是的PDU格式的。以下分析的都是PDU格式数据包...
  • tangzf091
  • tangzf091
  • 2012年08月02日 09:29
  • 1410

SMS短信的PDU编码解码,附java解码源码

发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短...
  • xcg8818
  • xcg8818
  • 2017年07月18日 17:10
  • 454

手机短信息 SMS AT PDU

 目前手机短信息的应用越来越广泛,互联网上提供短信息发送的站点也越来越多,但一些站点的服务并不尽如人意,往往发出去的短信息石沉大海。最可靠的发送方法当然是用手中的手机了,如果设置了状态报告,更能确切知...
  • delphizhou
  • delphizhou
  • 2008年09月11日 17:54
  • 789

SMS短信PDU编码详细解析

以一个例子来详细解析: 01 08 91 683110300405F1 60 05 A1 0110F0 00 08 31808061349523 04 4F60597D(1)01-短信状态; [01...
  • hlx156
  • hlx156
  • 2017年01月03日 17:38
  • 1353

手机短信息SMS的程序开发

目前手机短信息的应用越来越广泛,互联网上提供短信息发送的站点也越来越多,但一些站点的服务并不尽如人意,往往发出去的短信息石沉大海。最可靠的发送方法当然是用手中的手机了,如果设置了状态报告,更能确切知道...
  • chenlianjia
  • chenlianjia
  • 2004年11月02日 15:29
  • 670

手机短信息SMS的程序开发

目前手机短信息的应用越来越广泛,互联网上提供短信息发送的站点也越来越多,但一些站点的服务并不尽如人意,往往发出去的短信息石沉大海。最可靠的发送方法当然是用手中的手机了,如果设置了状态报告,更能确切知道...
  • xwchen
  • xwchen
  • 2008年05月27日 11:03
  • 530

获取手机的短信内容和联系人信息

获取手机的短信内容和联系人信息
  • tianmijieguo
  • tianmijieguo
  • 2015年07月13日 10:22
  • 956
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手机短信息SMS开发—编码,解码
举报原因:
原因补充:

(最多只允许输入30个字)