您的位置:首页 > 其它

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

2007-10-24 10:25 597 查看
因为项目中要对纯英文短信解码,而期刊网里面的论文一般只是说了解码与编码方式,没有给出详细的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: