USSD收到消息解码

时间:2014-04-16 07:30:49

标签: c# decode at-command ussd ucs2

我正在向调制解调器发送AT + CUSD命令,当我收到此消息时我无法接受 理解它,也不以任何方式解码它,我需要帮助。 这是一个样本

AT+CUSD=1,"*100#",15
+CUSD: 0,"Service not allowed.",15
OK
AT+CUSD=1,"*155#1#",15
+CUSD: 0,"0645063306280642002006270644062F06410639003A00200037002C003600320035002E0030003000200020000A06270644063506440627062D064A0629003A0030002E0030003000200020000A00200627064406440627062D0642002006270644062F06410639003A0030002E003000300020",72
OK

你看到第一个是可读的,dcs是15,但另一个不是,而且dcs是72帮助!!

1 个答案:

答案 0 :(得分:3)

  

使用Unicode解码时会得到什么?我可以看到很多06,根据维基百科,标准阿拉伯语是从0600 - 06FF编码的。 S List

答案归功于S List

是我需要解码每四个字母,如" 0645" 使用" UCS2"编码

我的代码是这样的:

String origin = "0645063306280642002006270644062F06410639003A00200037002C003600320035002E0030003000200020000A06270644063506440627062D064A0629003A0030002E0030003000200020000A00200627064406440627062D0642002006270644062F06410639003A0030002E003000300020";
if (origin.Count() % 2 == 0)
            {
                List<short> list = new List<short>();
                List<byte> bytes = new List<byte>();
                var encode = Encoding.GetEncoding("UCS-2");
                for (int i = 0; i < origin.Count(); i += 4)
                {
                    list.Add(Convert.ToInt16(origin.Substring(i, 4), 16));
                }
                foreach (var item in list)
                {
                    bytes.Add((byte)(item & 255));
                    bytes.Add((byte)(item >> 8));
                }
                return encode.GetString(bytes.ToArray());
            }