源代码下载地址:
扩展方法:
/* ----------------------------------------------------------
文件名称:Extensions.cs
作者:秦建辉
MSN:splashcn@msn.com
QQ:36748897
博客:http://blog.youkuaiyun.com/jhqin
开发环境:
Visual Studio V2010
.NET Framework 4 Client Profile
版本历史:
V1.0 2011年08月09日
扩展方法:
1、Int32类型的Bit位测试和Bit位设置
2、Array类型的子数组检索
------------------------------------------------------------ */
using System;
namespace Splash
{
/// <summary>
/// 扩展方法:
/// 1、Int32类型的Bit位测试和Bit位设置
/// 2、Array类型的子数组检索
/// </summary>
public static class Extensions
{
/// <summary>
/// Bit位测试
/// </summary>
/// <param name="n">要测试的整数</param>
/// <param name="bit">要测试的Bit位序号</param>
/// <returns>
/// true:该Bit位为1
/// false:该Bit为0
/// </returns>
public static Boolean BitTest(this Int32 n, Int32 bit)
{
if ((n & (1 << bit)) != 0)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// Bit位设置
/// </summary>
/// <param name="n">要设置的整数</param>
/// <param name="bit">要设置的Bit位序号</param>
public static Int32 BitSet(this Int32 n, Int32 bit)
{
return n | (1 << bit);
}
/// <summary>
/// 从此实例检索子数组
/// </summary>
/// <param name="source">要检索的数组</param>
/// <param name="startIndex">起始索引号</param>
/// <param name="length">检索最大长度</param>
/// <returns>与此实例中在 startIndex 处开头、长度为 length 的子数组等效的一个数组</returns>
public static Array SubArray(this Array source, Int32 startIndex, Int32 length)
{
if (startIndex < 0 || startIndex > source.Length || length < 0)
{
throw new ArgumentOutOfRangeException();
}
Array Destination;
if (startIndex + length <= source.Length)
{
Destination = Array.CreateInstance(source.GetType(), length);
Array.Copy(source, startIndex, Destination, 0, length);
}
else
{
Destination = Array.CreateInstance(source.GetType(), source.Length - startIndex);
Array.Copy(source, startIndex, Destination, 0, source.Length - startIndex);
}
return Destination;
}
}
}
测试代码:
using System;
using System.Collections.Specialized;
using Splash.Phone;
namespace SplashCheck
{
class Program
{
static void Main(string[] args)
{
Test_Decoding();
Test_Encoding();
}
static void Test_Encoding()
{
SMS sms = new SMS();
String UDC = "this is long short message! this is long short message! this is long short message! this is long short message! this is long short message! this is long short message! this is long short message! this is long short message!";
String[] CSMSeries = sms.PDUEncoding("+8613810347745", UDC);
Console.WriteLine("长短信编码:");
for(Int32 i = 0; i < CSMSeries.Length; i++)
{
Console.WriteLine("第" + (i+1) + "条:");
Console.WriteLine(CSMSeries[i]);
}
}
static void Test_Decoding()
{
String data = "07917283010010F5040BC87238880900F10000993092516195800AE8329BFD4697D9EC37";
SMS.SMSPARTS Parts = SMS.PDUDecoding(data);
Console.WriteLine("解码内容:");
Console.WriteLine("服务中心地址:" + Parts.SCA);
Console.WriteLine("发送方地址:" + Parts.OA);
Console.WriteLine("服务中心时间戳:" + Parts.SCTS.ToString());
Console.WriteLine("用户数据:" + Parts.UD);
Console.WriteLine("应答路径:" + Parts.RP.ToString());
Console.WriteLine("用户数据头标识:" + Parts.UDHI.ToString());
Console.WriteLine("状态报告指示:" + Parts.SRI.ToString());
Console.WriteLine("更多信息发送:" + Parts.MMS.ToString());
Console.WriteLine("信息类型指示:" + Parts.MTI.ToString());
Console.WriteLine("PID协议标识:" + Parts.PID.ToString("X2"));
Console.WriteLine("数据编码方案:" + Parts.DCS.ToString());
Console.WriteLine("文本压缩指示:" + Parts.TC.ToString());
Console.WriteLine("消息类型:" + Parts.MC.ToString());
if (Parts.UDH != null)
{
Console.WriteLine("用户数据头信息:");
foreach (SMS.PDUUDH Element in Parts.UDH)
{
Console.WriteLine("信息元素标识:" + Element.IEI.ToString("X2"));
Console.Write("信息元素数据:");
foreach (Byte b in Element.IED)
{
Console.Write(b.ToString("X2"));
}
Console.WriteLine();
}
}
}
}
}