メール猫開発(2):メール受信後の復号化


at+cmgf=0//PDU方式でメールを受信するように設定
受信した情報:
+CMGR:0,,25 08 91 6831109,03305 F 0 20 D 91 683148625389 F 300//代表符号化方式7ビット符号化方式08:代表16ビット符号化方式61803051525023 05 E 8329 BFD 06 OK
受信した情報の復号化:
/// 
        ///  7 
        /// 
        /// 
        /// 
        public String Decode7(String src)
        {
            StringBuilder sb = new StringBuilder();
            int[] cs = new int[src.Length / 2];

            // 
            int tmpout = 0;
            for (int i = 0; i < src.Length / 2; i++)
            {
                if (int.TryParse(src.Substring(i * 2, /*i * 2 +*/ 2), System.Globalization.NumberStyles.AllowHexSpecifier, null, out tmpout))
                {
                    cs[i] = tmpout;
                }
            }
            int iLeft = 0;// 
            int iChar = 0;// 
            int tmp = 0;// 
            int j = 0;// 

            while (j < cs.Length)
            {
                tmp = ((cs[j] << iChar) & 0x7f) | iLeft;
                sb.Append((char)tmp);
                iLeft = cs[j] >> (7 - iChar);
                j++;
                iChar++;

                if (iChar == 7)
                {
                    sb.Append((char)iLeft);
                    iLeft = 0;
                    iChar = 0;
                }
            }

            if (iLeft != 0)
                sb.Append((char)iLeft);
            return sb.ToString();
        }
/// 
        ///  16 
        /// 
        /// 
        /// 
        public String Decode16(String src)
        {
            StringBuilder sb = new StringBuilder();
            int tmp = 0;
            for (int i = 0; i < src.Length / 4; i++)
            {
                if (int.TryParse(src.Substring(i * 4, /*(i + 1) * */ 4), System.Globalization.NumberStyles.AllowHexSpecifier, null, out tmp))
                    //tmp = Integer.parseInt(src.substring(i * 4, (i + 1) * 4), 16);
                    sb.Append((char)tmp);
            }
            return sb.ToString();
        }

ここで、
System.Globalization.NumberStyles.AllowHexSpecifier
は、数値文字列が16進数値を表すことを示す.