短信猫底层代码编写C#(续)

来源:互联网 发布:openwrt mac白名单 编辑:程序博客网 时间:2024/05/06 06:22

介绍下接收到得短信pdu串解码

 

 

/////////////////////////////////////   

///文         件:PDUdecoding.cs   

///概         要:针对国内短信解码(USC2)   

///组成结构:包含四个函数:   

///       1、GetEverySMS(string   SMS)   

///       2、GetTelphone(string   SMS)   

///       3、GetDataTime(string   SMS)     

///       4、GetContent(string     SMS)         

////////////////////////////////////   

using   System;   

using   System.Text;   

namespace   revMsg

{  

///   <summary>   

///   PDUdecoding   的摘要说明。   

///   </summary>   

public   class   PDUdecoding   

{   

public   PDUdecoding()   

{   

 

//   TODO:   在此处添加构造函数逻辑   

 

}   

 

///   <summary>   

///   判断接受的短信是PDU格式还是TEXT格式   

///   </summary>   

 

public   bool   IsPDU(string   SMS)   

{   

if(SMS.Substring(40,2)!="08")   

return   false;   

return   true;   

}   

 

///   <summary>   

///   函数功能:短信内容提取   

///   函数名称:GetEverySMS(string   SMS)   

///   参         数:SMS   要进行提取的整个短信内容   

///   返   回   值:将多个短信内容拆分   

///   </summary>   

 

public   string[]   GetEverySMS(string   SMS)   

{   

char[]   str="/n".ToCharArray();   

string[]   temp=SMS.Split(str);   

return   temp;   

}   

 

///   <summary>   

///   函数功能:提取短信的发送人电话号码   

///   函数名称:GetTelphone(string   SMS)   

///   参         数:SMS   要进行转换的整个短信内容   

///   返   回   值:电话号码   

///   </summary>   

 

public   string   GetTelphone(string   SMS)   

{   

string   tel=SMS.Substring(24,14);   

string   s="";   

for(int   i=0;i<11;i+=2)   

{   

s+=tel[i+1];   

s+=tel[i];   

}   

s+=tel[tel.Length-1];   

return   s;   

}   

 

///   <summary>   

///   函数功能:提取短信的发送时间   

///   函数名称:GetDataTime(string   SMS)   

///   参         数:SMS:要进行转换的整个短信内容   

///   返   回   值:发送时间   

///   </summary>   

 

public   string   GetDataTime(string   SMS)   

{   

string   time=SMS.Substring(42,12);   

string   s="";   

for(int   i=0;i<11;i+=2)   

{   

s+=time[i+1];   

s+=time[i];   

}   

string   t=s.Substring(0,2)+"年"+s.Substring(2,2)+"月"+s.Substring(4,2)+"日"+s.Substring(6,2)+":"+s.Substring(8,2)+":"+s.Substring(10,2);   

return   t;   

}   

 

///   <summary>   

///   函数功能:提取短信的内容(PDU)   

///   函数名称:GetContent(string   SMS)   

///   参         数:SMS:要进行转换的整个短信内容   

///   返   回   值:短信内容   

///   </summary>   

 

public   string   GetContent(string   SMS)   

{   

string   c="";   

string   len=SMS.Substring(56,2);   

int   length=System.Convert.ToInt16(len,16);   

length*=2;   

string   content=SMS.Substring(58,length);   

for(int   i=0;i<length;i+=4)   

{   

string   temp=content.Substring(i,4);   

int   by=System.Convert.ToInt16(temp,16);   

char   ascii=(char)by;   

c+=ascii.ToString();   

}   

return   c;   

}   

 

///   <summary>   

///   函数功能:提取短信的TEXT内容(TEXT)   

///   函数名称:GetTextContent(string   SMS)   

///   参         数:SMS:要进行转换的整个短信内容   

///   返   回   值:短信内容   

///   </summary>   

 

public   string   GetTextContent(string   SMS)   

{   

string   str="";   

string   c="";   

byte   by;   

char   ascii;   

int   i;   

SMS=SMS.Replace("/r","");   

SMS=SMS.Replace("/n","");   

string   content=SMS.Substring(58);   

for(i=content.Length-2;i>=0;i-=2)   

{   

by=Convert.ToByte(content.Substring(i,2),16);   

str+=Convert.ToString(by,2).PadLeft(8,'0');   

}   

for(i=str.Length-7;i>=0;i-=7)   

{   

by=Convert.ToByte(str.Substring(i,7),2);   

ascii=(char)by;   

c+=ascii.ToString();   

}   

return   c;   

}   

}   

}