现在的位置: 首页 > 综合 > 正文

手机短信PDU字符串中用到的7bit加密解密函数

2013年10月04日 ⁄ 综合 ⁄ 共 1929字 ⁄ 字号 评论关闭

原文参考:http://www.cnblogs.com/Engin/archive/2010/11/07/1871154.html

整理的代码如下:

        /// <summary>
        /// PDU字符串用到的7bit的加密函数
        /// </summary>
        /// <param name="len">用户数据长度</param>
        /// <param name="strUserData">数据部分PDU字符串</param>
        /// <returns></returns>
        public string PDU7bitContentEncoder(string strUserData)
        {
            string result = string.Empty;
            string resultLength = strUserData.Length.ToString("X2");                  //7bit编码 用户数据长度:源字符串长度

            Encoding encodingAsscii = Encoding.ASCII;
            byte[] bytes = encodingAsscii.GetBytes(strUserData);

            string temp = string.Empty;                                     //存储中间字符串 二进制串
            string tmp;
            for (int i = strUserData.Length; i > 0; i--)                          //高低交换 二进制串
            {
                tmp = Convert.ToString(bytes[i - 1], 2);
                while (tmp.Length < 7)                                      //不够7位,补齐
                {
                    tmp = "0" + tmp;
                }
                temp += tmp;
            }

            for (int i = temp.Length; i > 0; i -= 8)                    //每8位取位为一个字符 即完成编码
            {
                if (i > 8)
                {
                    result += Convert.ToInt32(temp.Substring(i - 8, 8), 2).ToString("X2");
                }
                else
                {
                    result += Convert.ToInt32(temp.Substring(0, i), 2).ToString("X2");
                }
            }

            return result;
        }

        /// <summary>
        /// PDU字符串用到的7bit的解密函数
        /// </summary>
        /// <param name="len">用户数据长度</param>
        /// <param name="strUserData">数据部分PDU字符串</param>
        /// <returns></returns>
        public string PDU7bitContentDecoder(string strUserData)
        {
            string result = string.Empty;
            byte[] b;

            b = Hex2Bin(strUserData);

            Array.Reverse(b);       //字节串翻转

            result = Bin2BinStringof8Bit(b);

            result = BinStringof8Bit2AsciiwithReverse(result);

            return result;
        }

抱歉!评论已关闭.