首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#短信解码解决办法

2013-03-06 
C#短信解码移动的短信回执,收到的编码是“0031003065E500310031003A00320033002081F3003100350030003300310

C#短信解码
移动的短信回执,收到的编码是“0031003065E500310031003A00320033002081F30031003500300033003100310039003900370030003477ED4FE190018FBE000A536B751F90E856DE5E94690D726959766CB95B89516895EE9898FF0C79F06B638FDB884C98CE96698BC44F30FF1B6B64524D670962A5905379F051765BCC542B53CD5F0F810280AA9178FF0C589E52A060A375C598CE9669”
和普通短信编码有很大区别,希望有人能解出来并提供方法,谢谢了
[解决办法]
这个是PDU串
         string _mobileNumber = “12345678901”;//手机号码
         string _content =”测试”;//短信同容
          string centerNo = “13800100500”;
          string length = string.Empty;
          string smstosendPDU = string.Empty;
         length = PDUencoding.CountSMSLength(_mobileNumber, _content);
         smstosendPDU = PDUencoding.PDUEncodingSMS(centerNo, _mobileNumber, _content);
         string str = "AT+CMGS=" + length + "\r" + smstosendPDU + "\x01A";//指令格式
         tbSmsPduCode.Text = str;



 1        /// <summary>
 2        /// 计算消息长度
 3        /// </summary>
 4        /// <param name="_phoneNumber">Phone</param>
 5        /// <param name="_targetText">Context</param>
 6        /// <returns></returns>
 7        public static string CountSMSLength(string _phoneNumber, string _targetText)
 8        {
 9            if (!(_phoneNumber.Substring(0, 2) == "86"))
10            {
11                _phoneNumber = String.Format("86{0}", _phoneNumber);     //检查手机号是否按标准格式书写,不是,就补上“”
12            }
13            return (8 + ((_phoneNumber.Length % 2) == 0 ? _phoneNumber.Length / 2 : (_phoneNumber.Length + 1) / 2) + _targetText.Length * 2).ToString();
14        }
15 
16        /// <summary>
17        /// 对整个要发送的短信的PDU编码
18        /// </summary>
19        /// <param name="cscaNumber"></param>
20        /// <param name="PhoneNumber"></param>
21        /// <param name="TargetText"></param>
22        /// <returns></returns>


23        public static string PDUEncodingSMS(string _cscaNumber, string _phoneNumber, string _targetText)
24        {
25            if (!(_cscaNumber.Substring(0, 2) == "86"))
26            {
27                _cscaNumber = String.Format("86{0}", _cscaNumber);     //检查手机号是否按标准格式书写,不是,就补上“”
28            }
29            if (!(_phoneNumber.Substring(0, 2) == "86"))
30            {
31                _phoneNumber = String.Format("86{0}", _phoneNumber);     //检查手机号是否按标准格式书写,不是,就补上“”
32            }
33            //开始号码
34            StringBuilder _sb = new StringBuilder();
35            _sb.Append("0891");
36            //短信中心
37            _sb.Append(ReversalNumber(_cscaNumber));
38            _sb.Append("1100" + String.Format("{0,2:X}", _phoneNumber.Length).Replace(' ', '0') + "91");
39            //目标号码
40            _sb.Append(ReversalNumber(_phoneNumber));
41            //协议标识,编码信息和有效期
42            _sb.Append("0008FF");//+ String.Format("{0,2:X}", TargetText.Length * 2).Replace(' ', '0'));
43            //短信长度和内容
44            _sb.Append(ContentEncoding(_targetText));
45            return _sb.ToString();
46        }
47 
48        /// <summary>
49        /// 手机号码的编码
50        /// </summary>
51        /// <param name="Target"></param>
52        /// <returns></returns>
53        public static string ReversalNumber(string _phone)
54        {
55            string _strResult = string.Empty;
56            if (!(_phone.Substring(0, 2) == "86"))
57            {
58                _phone = String.Format("86{0}", _phone);     //检查手机号是否按标准格式书写,不是,就补上“”


59            }
60 
61            char[] _eachnumber = (_phone.Length % 2 == 0) ? Convert.ToString(_phone).ToCharArray() : Convert.ToString(_phone + "F").ToCharArray();
62            for (int i = 0; i < _eachnumber.Length - 1; i += 2)
63            {
64                _strResult += (_eachnumber[i + 1].ToString() + _eachnumber[i].ToString());
65            }
66            return _strResult;
67        }
68 
69        /// <summary>
70        /// 短信内容的编码
71        /// </summary>
72        /// <param name="srvContent"></param>
73        /// <returns></returns>
74        public static string ContentEncoding(string _srvContent)
75        {
76            Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;
77            string s = string.Empty;
78            byte[] encodedBytes = encodingUTF.GetBytes(_srvContent);
79            for (int i = 0; i < encodedBytes.Length; i++)
80            {
81                s += BitConverter.ToString(encodedBytes, i, 1);
82            }
83            s = String.Format("{0:X2}{1}", s.Length / 2, s);
84 
85            return s;
86        }
[解决办法]
学习了,这个还第一次遇到。。。。
[解决办法]
Mark,这对我也很重要
[解决办法]
学习学习!
[解决办法]
晕了......

热点排行