C#:PDU格式短信编解码(六)扩展方法及源代码下载

源代码下载地址:

SMS.zip

扩展方法:

/* ----------------------------------------------------------
文件名称:Extensions.cs

作者:秦建辉

MSN:splashcn@msn.com
QQ:36748897

博客:http://blog.csdn.net/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();
                }
            }
        }        
    }
}


 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值