




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
短信解码及编码using System.Text;namespace CN.SMSLib / / By popcorn 2004.5。 / / public class CNText public CNText() / / 编码格式 / public enum GSMCode Bit7=0, Bit8=1, UCS2=2 / / 对整个短信息进行解码 / / 要解码的信息 / 解码后的电话号码 / 解码后的短信内容 / 短信时间戳 / 使用的编码方式 / 成功返回true 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(iLength0) if(s.Substring(2,2)=91) SCA+=+; iLength-; for(int i=0;iiLength*2;i+=2) SCA+=s.Substring(5+i,1); SCA+=s.Substring(4+i,1); if(SCA.EndsWith(F)SCA=SCA.Remove(SCA.Length-1,1); s=s.Remove(0,iLength*2+6); /发送方号码 iLength=int.Parse(s.Substring(0,2),System.Globalization.NumberStyles.AllowHexSpecifier); if(s.Substring(2,2)=91) phone=+; if(iLength%2=1)iLength+; for(int i=0;iiLength;i+=2) phone+=s.Substring(5+i,1); phone+=s.Substring(4+i,1); if(phone.EndsWith(F)phone=phone.Remove(phone.Length-1,1); s=s.Remove(0,iLength+6); /编码方式 if(s.Substring(0,2)=08) code=GSMCode.UCS2; else if(s.Substring(0,2)=00) code=GSMCode.Bit7; else code=GSMCode.Bit8; s=s.Remove(0,2); /时间戳 sendTime=new DateTime(int.Parse(20+s.Substring(1,1)+s.Substring(0,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), int.Parse(s.Substring(11,1)+s.Substring(10,1); s=s.Remove(0,16); /收到的信息 if(code=GSMCode.Bit7) text=DecodingBit7(s); else if(code=GSMCode.UCS2) text=DecodingUCS2(s); else text=DecodingBit8(s); return true; catch return false; / / 对短信息中心进行编码 / / 要编码的号码 / 编码后的号码 static public string EncodingSCA(string s) StringBuilder sb=new StringBuilder(); if(s.Length=0) sb.Append(00); return sb.ToString(); if(s.StartsWith(+) sb.Append(91); /用国际格式号码(在前面加+) s=s.Remove(0,1); else sb.Append(C8); if(s.Length%2=1)s+=F; for(int i=0;is.Length;i+=2) sb.Append(s.Substring(i+1,1); sb.Append(s.Substring(i,1); string len=(sb.Length/2).ToString(X2); return len+sb.ToString(); / / 对电话号码进行编码 / / 要编码的电话号码 / 编码后的电话号码 static public string EncodingNumber(string mobileNo) StringBuilder sb=new StringBuilder(); if(mobileNo.StartsWith(+) sb.Append(91); mobileNo=mobileNo.Remove(0,1); else sb.Append(C8); string len=mobileNo.Length.ToString(X2); if(mobileNo.Length%2=1)mobileNo+=F; for(int i=0;imobileNo.Length;i+=2) sb.Append(mobileNo.Substring(i+1,1); sb.Append(mobileNo.Substring(i,1); return len+sb.ToString(); / / 使用7-bit进行编码 / / 要编码的英文字符串 / 信息长度及编码后的字符串 static public string EncodingBit7(string s) int iLeft=0; string sReturn=; StringBuilder sb=new StringBuilder(); for(int i=0;is.Length;i+) / 取源字符串的计数值的最低3位 int iChar = i & 7; byte bSrc=(byte)char.Parse(s.Substring(i,1); / 处理源串的每个字节 if(iChar = 0) / 组内第一个字节,只是保存起来,待处理下一个字节时使用 iLeft = (int)char.Parse(s.Substring(i,1); else / 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节 sReturn=(bSrc iChar; / 修改目标串的指针和计数值 pDst+; sb.Append(sReturn.Substring(2,2); sb.Append(sReturn.Substring(0,2); return (sb.Length/2).ToString(X2)+sb.ToString(); / / 对7-bit编码进行解码 / / 要解码的字符串 / 解码后的英文字符串 static public string DecodingBit7(string s) int iByte=0; int iLeft=0; / 将源数据每7个字节分为一组,解压缩成8个字节 / 循环该处理过程,直至源数据被处理完 / 如果分组不到7字节,也能正确处理 System.Text.StringBuilder sb=new System.Text.StringBuilder(); for(int i=0;is.Length;i+=2) byte bSrc=byte.Parse(s.Substring(i,2),System.Globalization.NumberStyles.AllowHexSpecifier); / 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节 sb.Append(bSrc (7-iByte); / 修改字节计数值 iByte+; / 到了一组的最后一个字节 if(iByte = 7) / 额外得到一个目标解码字节 sb.Append(iLeft.ToString(X2); / 组内字节序号和残余数据初始化 iByte = 0; iLeft = 0; string sReturn=sb.ToString(); byte buf=new bytesReturn.Length/2; for(int i=0;isReturn.Length;i+=2) bufi/2=byte.Parse(sReturn.Substring(i,2),System.Globalization.NumberStyles.AllowHexSpecifier); return System.Text.Encoding.ASCII.GetString(buf); / / 使用8-bit进行编码 / / 要编码的字符串 / 信息长度及编码后的字符串 static public string EncodingBit8(string s) StringBuilder sb=new StringBuilder(); byte buf=Encoding.ASCII.GetBytes(s); sb.Append(buf.Length.ToString(X2); for(int i=0;ibuf.Length;i+) sb.Append(bufi.ToString(X2); return sb.ToString(); / / 使用8-bit进行解码 / / 要解码的字符串 / 解码后的字符串 static public string DecodingBit8(string s) byte buf=new bytes.Length/2; StringBuilder sb=new StringBuilder(); for(int i=0;is.Length;i+=2) bufi/2=byte.Parse(s.Substring(i,2),System.Globalization.NumberStyles.AllowHexSpecifier); return Encoding.ASCII.GetString(buf); / / 中文短信息UCS2编码 / / 要编码的中文字符串 / 信息长度及编码后的字符串 static public string EncodingUCS2(string s) StringBuilder sb=new StringBuilder(); byte buf=Encoding.Unicode.GetBytes(s); sb.Append(buf.Length.ToString(X2); for(int i=0;ibuf.Length;i+=2) sb.Append(bufi+1.ToString(X2); sb.Append(bufi.ToString(X2); return sb.ToString(); / / 中文短信息UCS2解码 / / 要解码的信息 / 解码后的中文字符串 static public string DecodingUCS2(string s) byte buf=new bytes.Len
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论