pdu短信解码
2009-07-25 13:55
295 查看
针对:http://blog.csdn.net/duwx/archive/2009/03/07/3967017.aspx介绍短信解码不能解析非13(即一些SP)位号码的修改
Code
/////////////////////////////////////
///文 件:FFPDUdecoding.cs
///概 要:针对国内短信解码(USC2)
///组成结构:包含四个函数:
/// 1、GetEverySMS(string SMS)
/// 2、GetTelphone(string SMS)
/// 3、GetDataTime(string SMS)
/// 4、GetContent(string SMS)
////////////////////////////////////
using System;
using System.Text;
namespace SMS
{
/// <summary>
/// FPDUdecoding 的摘要说明。
/// </summary>
public class FPDUdecoding
{
public FPDUdecoding()
{
// 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>
/// 对方电话号码长度,补偶
/// </summary>
/// <param name="SMS"></param>
/// <returns></returns>
public int GetTelphoneLenght(string SMS)
{
int len = Convert.ToInt16(SMS.Substring(20, 2), 16);
return len;
}
/// <summary>
/// 函数功能:提取短信的发送人电话号码
/// 函数名称:GetTelphone(string SMS)
/// 参 数:SMS 要进行转换的整个短信内容
/// 返 回 值:电话号码
/// </summary>
public string GetTelphone(string SMS)
{
int len= GetTelphoneLenght(SMS);
string tel = SMS.Substring(24, (len % 2 == 0 ? len : len + 1));
string s = "";
for (int i = 0; i <tel.Length; i += 2)
{
s += tel[i + 1];
s += tel[i];
}
return s.Replace("F","");
}
/// <summary>
/// 函数功能:提取短信的发送时间
/// 函数名称:GetDataTime(string SMS)
/// 参 数:SMS:要进行转换的整个短信内容
/// 返 回 值:发送时间
/// </summary>
public string GetDataTime(string SMS)
{
int len=GetTelphoneLenght(SMS);
string time = SMS.Substring(24+(len% 2 ==0 ? len : len + 1)+4, 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 = "";
int phoneLength = GetTelphoneLenght(SMS);
int start = 24 + (phoneLength % 2 == 0 ? phoneLength : phoneLength + 1) + 4 + 12+2;
string s = SMS.Substring(start, 2);
int length = Convert.ToInt16(s, 16);
length *= 2;
string content = SMS.Substring(start + 2, 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;
}
}
}
Code
/////////////////////////////////////
///文 件:FFPDUdecoding.cs
///概 要:针对国内短信解码(USC2)
///组成结构:包含四个函数:
/// 1、GetEverySMS(string SMS)
/// 2、GetTelphone(string SMS)
/// 3、GetDataTime(string SMS)
/// 4、GetContent(string SMS)
////////////////////////////////////
using System;
using System.Text;
namespace SMS
{
/// <summary>
/// FPDUdecoding 的摘要说明。
/// </summary>
public class FPDUdecoding
{
public FPDUdecoding()
{
// 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>
/// 对方电话号码长度,补偶
/// </summary>
/// <param name="SMS"></param>
/// <returns></returns>
public int GetTelphoneLenght(string SMS)
{
int len = Convert.ToInt16(SMS.Substring(20, 2), 16);
return len;
}
/// <summary>
/// 函数功能:提取短信的发送人电话号码
/// 函数名称:GetTelphone(string SMS)
/// 参 数:SMS 要进行转换的整个短信内容
/// 返 回 值:电话号码
/// </summary>
public string GetTelphone(string SMS)
{
int len= GetTelphoneLenght(SMS);
string tel = SMS.Substring(24, (len % 2 == 0 ? len : len + 1));
string s = "";
for (int i = 0; i <tel.Length; i += 2)
{
s += tel[i + 1];
s += tel[i];
}
return s.Replace("F","");
}
/// <summary>
/// 函数功能:提取短信的发送时间
/// 函数名称:GetDataTime(string SMS)
/// 参 数:SMS:要进行转换的整个短信内容
/// 返 回 值:发送时间
/// </summary>
public string GetDataTime(string SMS)
{
int len=GetTelphoneLenght(SMS);
string time = SMS.Substring(24+(len% 2 ==0 ? len : len + 1)+4, 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 = "";
int phoneLength = GetTelphoneLenght(SMS);
int start = 24 + (phoneLength % 2 == 0 ? phoneLength : phoneLength + 1) + 4 + 12+2;
string s = SMS.Substring(start, 2);
int length = Convert.ToInt16(s, 16);
length *= 2;
string content = SMS.Substring(start + 2, 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;
}
}
}
相关文章推荐
- 短信猫软件的实现(C#)<五>PDU格式解码C#实现
- 手机短信的PDU编码和解码
- java解码PDU短信
- 手机短信PDU编码与解码
- 短信PDU模式解码
- PDU短信编解码格式说明(找来找去个人认为这一篇还是比较靠谱的)
- 手机短信PDU编码与解码
- 手机短信(SMS)PDU编码与解码
- C#:PDU格式短信编解码(六)扩展方法及源代码下载
- 手机短信PDU编码与解码
- PDU短信解码
- .net平台手机管理软件开发(10)—— 短信部分 VB.NET解码PDU
- 手机短信的PDU编码和解码
- 短信PDU解码 (转)
- 手机短信PDU编码与解码
- 手机短信的PDU编码和解码 (转)
- 手机短信的PDU编码和解码
- C#:PDU格式短信编解码(一)解码部分
- 短信猫软件的实现(C#)<八>7bitPDU的解码
- 中英文手机短信 PDU 串 编码(UCS2) 解码(UCS2,7-Bit) 程序 ( in C# )