已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 员工健康促进与员工压力管理方案
- 合并糖尿病的终末期老年患者营养筛查策略
- 合并症对复发监测策略的影响
- 可穿戴设备在抗凝治疗个体化中的凝血-血小板活性监测策略
- 2025江苏连云港市市级机关遴选公务员32人备考题库附答案
- 变异株传播链的溯源与追踪策略
- 2026年一级建造师之一建铁路工程实务考试题库300道附答案【培优b卷】
- 2026年一级注册建筑师之建筑结构考试题库300道附参考答案(典型题)
- 2026年初级经济师之初级建筑与房地产经济考试题库300道附参考答案(达标题)
- 2025贵州毕节市建设投资有限公司遴选中层管理人员10人备考题库附答案
- 2025甘肃省水务投资集团有限公司招聘企业管理人员笔试备考题库附答案解析
- 2025年秋季学期国家开放大学《人文英语4》期末机考精准复习题库
- 银饰店劳务合同范本
- 服装买卖合同协议模板
- 承揽外墙维修协议书
- 2025年度分管领导个人履行“一岗双责”、全面从严治党暨廉洁自律情况报告
- GB/T 11378-2025金属覆盖层覆盖层厚度测量轮廓仪法
- 法律职业伦理考试大题及答案
- 开远市海绵城市智慧监测系统施工方案
- 《公路自然灾害监测预警系统技术指南(试行)》
- 2025年铆工(高级)职业技能(理论知识)考试练习题库(含答案)
评论
0/150
提交评论