PDU模式下纯英文短信的解码函数

因为项目中要对纯英文短信解码,而期刊网里面的论文一般只是说了解码与编码方式,没有给出详细的VC编写的函数,就贴一个自己写的解码函数。我的解码长度为13个字符。如果解码长度加大,需要将程序稍作修改即可做成通用函数。我的硬件平台为LPC2210和TC35i。编译环境为ADS,不怎么好用,有的地方写的比较的麻烦。如果在其他的编译环境可能可以更加简化。 
/***************************************************************************************** 
** 函数名称: DeCode7bitSMS 
** 功能描述: 对接收到的编码进行解码 
**         
** 输   入: 接收到的短信数据, 
** 输   出: 解码后的字符。对其他形式的编码形式屏蔽 
** 
** 作     者: ** 
** 日     期: 2007年10月21日 
**---------------------------------------------------------------------------------------------------------------- 
******************************************************************************************/ 
uint8  DeCode7bitSMS(uint8 *SMSContent,uint8 *DecodeSMS) 

     uint8  FilThisbits=0;       //填入本字节的位 
     uint8  FilNextbits=0;       //填入下一个字节的位 
     uint8  Rembits;               //取走填入下一字节位后剩余的位 
     uint8  MovNum=1;          //取给下一个字节bit数 
     uint8  temp;                     //用于参加与或运算 
     uint8  i,j=0; 
     uint8  temp1,temp2,SMSCode; 

     for(i=0; i<0x18; i++)     //转换24个,即12个 
     { 
         temp=0xFF; 
   
         FilThisbits=FilNextbits;   //将上个字节取出要填入本字节的数保存 
   
         if(MovNum==8)   //解码长度比较长修改此处,我的解码长度为13个,所有没有用%。注意使用%后会降低效率
        { 
            MovNum=1; 
            DecodeSMS[j++]= FilThisbits; 
            FilNextbits=0; 
            i--;                           //本次不用取数减去增加的1 
           continue; 

       } 
   
       if((SMSContent[i]>='0')&&(SMSContent[i]<='9'))   temp1=SMSContent[i]-0x30; 
       else   temp1=SMSContent[i]-0x37; 
   
       i++; 
       if((SMSContent[i]>='0')&&(SMSContent[i]<='9'))   temp2=SMSContent[i]-0x30; 
       else  temp2=SMSContent[i]-0x37; 
   
      SMSCode=(temp1<<4)+temp2;       //取出编码 
   
      temp=temp>>MovNum; 
      Rembits=SMSCode&temp;               //保存填入本字节的位 
   
      temp =~temp; 
      FilNextbits=SMSCode&temp;           //取出要填入下一字节的位 
   
      FilNextbits=FilNextbits>>(0x08-MovNum);   //填入下一字节的bit右移到低位 
      Rembits=Rembits<<(MovNum-0x01);          //填入本字节的位左移成高位 
   
      DecodeSMS[j++]=Rembits|FilThisbits; 
   
      MovNum++;      //取走个数加1 
     } 

     return 0; 
}
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值