提供一个手机短信息的编解码类(c#)

using System;
using System.Text;

namespace CN.SMSLib
{
///

1<summary>   
2/// By popcorn 2004.5。   
3/// [email protected]   
4/// </summary>

public class CNText
{
public CNText()
{
}
///

1<summary>   
2/// 编码格式   
3/// </summary>

public enum GSMCode
{
Bit7=0,
Bit8=1,
UCS2=2
}

///

1<summary>   
2/// 对整个短信息进行解码   
3/// </summary>

///

1<param name="s"/>

要解码的信息
///

1<param name="phone"/>

解码后的电话号码
///

1<param name="text"/>

解码后的短信内容
///

1<param name="sendTime"/>

短信时间戳
///

1<param name="code"/>

使用的编码方式
///

1<returns>成功返回true</returns>

static public bool DecodingMsg(string s,ref string phone,ref string text,ref DateTime sendTime,ref GSMCode code,ref string SCA)
{
try
{
//短信息中心
int iLength=int.Parse(s.Substring(0,2),System.Globalization.NumberStyles.AllowHexSpecifier);
if(iLength>0)
{
if(s.Substring(2,2)=="91")
{
SCA+="+";
iLength--;
}
for(int i=0;i

  1<ilength*2;i+=2) )="" ;="" <summary="" catch="" code="GSMCode.Bit8;" datetime(int.parse("20"+s.substring(1,1)+s.substring(0,1)),="" else="" false;="" for(int="" i="0;i&lt;iLength;i+=2)" if(code="GSMCode.UCS2)" if(ilength%2="1)iLength++;" if(phone.endswith("f"))phone="phone.Remove(phone.Length-1,1);" if(s.substring(0,2)="00" if(s.substring(2,2)="91" if(sca.endswith("f"))sca="SCA.Remove(SCA.Length-1,1);" ilength="int.Parse(s.Substring(0,2),System.Globalization.NumberStyles.AllowHexSpecifier);" int.parse(s.substring(11,1)+s.substring(10,1)));="" int.parse(s.substring(3,1)+s.substring(2,1)),="" int.parse(s.substring(5,1)+s.substring(4,1)),="" int.parse(s.substring(7,1)+s.substring(6,1)),="" int.parse(s.substring(9,1)+s.substring(8,1)),="" phone="+" phone+="s.Substring(4+i,1);" return="" s="s.Remove(0,16);" sca+="s.Substring(4+i,1);" sendtime="new" text="DecodingBit8(s);" true;="" {="" }="" 发送方号码="" 收到的信息="" 时间戳="" 编码方式="">   
  2/// 对短信息中心进行编码   
  3///    
  4/// <param name="s"/>要编码的号码   
  5/// <returns>编码后的号码</returns>   
  6static public string EncodingSCA(string s)   
  7{   
  8StringBuilder sb=new StringBuilder();   
  9if(s.Length==0)   
 10{   
 11sb.Append("00");   
 12return sb.ToString();   
 13}   
 14if(s.StartsWith("+"))   
 15{   
 16sb.Append("91"); //用国际格式号码(在前面加‘+’)   
 17s=s.Remove(0,1);   
 18}   
 19else   
 20{   
 21sb.Append("C8");   
 22}   
 23if(s.Length%2==1)s+="F";   
 24for(int i=0;i<s.length;i+=2) <summary="" len='(sb.Length/2).ToString("X2");' len+sb.tostring();="" return="" sb.append(s.substring(i+1,1));="" sb.append(s.substring(i,1));="" string="" {="" }="">   
 25/// 对电话号码进行编码   
 26///    
 27/// <param name="mobileNo"/>要编码的电话号码   
 28/// <returns>编码后的电话号码</returns>   
 29static public string EncodingNumber(string mobileNo)   
 30{   
 31StringBuilder sb=new StringBuilder();   
 32if(mobileNo.StartsWith("+"))   
 33{   
 34sb.Append("91");   
 35mobileNo=mobileNo.Remove(0,1);   
 36}   
 37else   
 38{   
 39sb.Append("C8");   
 40}   
 41string len=mobileNo.Length.ToString("X2");   
 42if(mobileNo.Length%2==1)mobileNo+="F";   
 43for(int i=0;i<mobileno.length;i+=2) <summary="" len+sb.tostring();="" return="" sb.append(mobileno.substring(i+1,1));="" sb.append(mobileno.substring(i,1));="" {="" }="">   
 44/// 使用7-bit进行编码   
 45///    
 46/// <param name="s"/>要编码的英文字符串   
 47/// <returns>信息长度及编码后的字符串</returns>   
 48static public string EncodingBit7(string s)   
 49{   
 50int iLeft=0;   
 51string sReturn="";   
 52StringBuilder sb=new StringBuilder();   
 53for(int i=0;i<s.length;i++) &="" (8-ichar)="" 7;="" <<="" bsrc="(byte)char.Parse(s.Substring(i,1));" byte="" else="" ichar="i" if(ichar="0)" ileft="bSrc" ileft).tostring("x4");="" int="" sreturn="(bSrc" {="" |="" }="" 取源字符串的计数值的最低3位="" 处理源串的每个字节="" 将该字节剩下的左边部分,作为残余数据保存起来="" 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节="" 组内第一个字节,只是保存起来,待处理下一个字节时使用="">&gt; iChar;   
 54// 修改目标串的指针和计数值 pDst++;   
 55sb.Append(sReturn.Substring(2,2));   
 56}   
 57}   
 58sb.Append(sReturn.Substring(0,2));   
 59return (sb.Length/2).ToString("X2")+sb.ToString();   
 60}   
 61/// <summary>   
 62/// 对7-bit编码进行解码   
 63/// </summary>   
 64/// <param name="s"/>要解码的字符串   
 65/// <returns>解码后的英文字符串</returns>   
 66static public string DecodingBit7(string s)   
 67{   
 68int iByte=0;   
 69int iLeft=0;   
 70// 将源数据每7个字节分为一组,解压缩成8个字节   
 71// 循环该处理过程,直至源数据被处理完   
 72// 如果分组不到7字节,也能正确处理   
 73System.Text.StringBuilder sb=new System.Text.StringBuilder();   
 74for(int i=0;i<s.length;i+=2) &="" 0x7f).tostring("x2"));="" <<="" bsrc="byte.Parse(s.Substring(i,2),System.Globalization.NumberStyles.AllowHexSpecifier);" byte="" ibyte)="" ileft="bSrc" ileft)="" sb.append((((bsrc="" {="" |="" 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节="" 将该字节剩下的左边部分,作为残余数据保存起来="">&gt; (7-iByte);   
 75// 修改字节计数值   
 76iByte++;   
 77// 到了一组的最后一个字节   
 78if(iByte == 7)   
 79{   
 80// 额外得到一个目标解码字节   
 81sb.Append(iLeft.ToString("X2"));   
 82// 组内字节序号和残余数据初始化   
 83iByte = 0;   
 84iLeft = 0;   
 85}   
 86}   
 87string sReturn=sb.ToString();   
 88byte [] buf=new byte[sReturn.Length/2];   
 89for(int i=0;i<sreturn.length;i+=2) 2]="byte.Parse(sReturn.Substring(i,2),System.Globalization.NumberStyles.AllowHexSpecifier);" <summary="" buf[i="" return="" system.text.encoding.ascii.getstring(buf);="" {="" }="">   
 90/// 使用8-bit进行编码   
 91///    
 92/// <param name="s"/>要编码的字符串   
 93/// <returns>信息长度及编码后的字符串</returns>   
 94static public string EncodingBit8(string s)   
 95{   
 96StringBuilder sb=new StringBuilder();   
 97byte [] buf=Encoding.ASCII.GetBytes(s);   
 98sb.Append(buf.Length.ToString("X2"));   
 99for(int i=0;i<buf.length;i++) <summary="" return="" sb.append(buf[i].tostring("x2"));="" sb.tostring();="" {="" }="">   
100/// 使用8-bit进行解码   
101///    
102/// <param name="s"/>要解码的字符串   
103/// <returns>解码后的字符串</returns>   
104static public string DecodingBit8(string s)   
105{   
106byte [] buf=new byte[s.Length/2];   
107StringBuilder sb=new StringBuilder();   
108for(int i=0;i<s.length;i+=2) 2]="byte.Parse(s.Substring(i,2),System.Globalization.NumberStyles.AllowHexSpecifier);" <summary="" buf[i="" encoding.ascii.getstring(buf);="" return="" {="" }="">   
109/// 中文短信息UCS2编码   
110///    
111/// <param name="s"/>要编码的中文字符串   
112/// <returns>信息长度及编码后的字符串</returns>   
113static public string EncodingUCS2(string s)   
114{   
115StringBuilder sb=new StringBuilder();   
116byte [] buf=Encoding.Unicode.GetBytes(s);   
117sb.Append(buf.Length.ToString("X2"));   
118for(int i=0;i<buf.length;i+=2) <summary="" return="" sb.append(buf[i+1].tostring("x2"));="" sb.append(buf[i].tostring("x2"));="" sb.tostring();="" {="" }="">   
119/// 中文短信息UCS2解码   
120///    
121/// <param name="s"/>要解码的信息   
122/// <returns>解码后的中文字符串</returns>   
123static public string DecodingUCS2(string s)   
124{   
125byte [] buf=new byte[s.Length];   
126for(int i=0;i&lt;s.Length;i+=4)   
127{   
128buf[i/2]=byte.Parse(s.Substring(2+i,2),System.Globalization.NumberStyles.AllowHexSpecifier);   
129buf[i/2+1]=byte.Parse(s.Substring(i,2),System.Globalization.NumberStyles.AllowHexSpecifier);   
130}   
131return Encoding.Unicode.GetString(buf);   
132} 
133
134}   
135}</buf.length;i+=2)></s.length;i+=2)></buf.length;i++)></sreturn.length;i+=2)></s.length;i+=2)></s.length;i++)></mobileno.length;i+=2)></s.length;i+=2)></ilength*2;i+=2)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus