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;
}
/*****************************************************************************************
** 函数名称: 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;
}
相关文章推荐
- 短信PDU模式解码
- 短信PDU模式解码
- java解码PDU短信
- C#:PDU格式短信编解码(四)编码参数设置部分
- GPRS用AT命令发送中文短信(TEXT模式到PDU模式的转换)
- PDU短信解码
- 手机短信的PDU编码和解码
- 手机短信PDU编码与解码
- GSM PDU 7bit短信编码与解码
- AT指令发送接收短信(Text/Pdu模式)
- C#:PDU格式短信编解码(五)GSM字符集
- AT指令对wavecom串口GSM工业手机发送短信(英文和PDU短信)
- AT指令对wavecom串口GSM工业手机发送短信(英文和PDU短信)
- Text模式和PDU模式短信的区别
- GSM短信发送PDU编码解码C++控制台实现
- 手机短信(SMS)PDU编码与解码
- 手机短信的PDU编码和解码
- 手机短信PDU字符串中用到的7bit加密解密函数
- GSM短信发送PDU编码解码C++控制台实现
- GSM PDU模式发中文短信