3

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 ですが、もう 1 つは読み取り可能ではなく、dcs は 72 です。

4

1 に答える 1

4

Unicode を使用してデコードすると、何が得られますか? 06 が多く見られますが、ウィキペディアによると、標準アラビア語は 0600 ~ 06FF でエンコードされています。Sリスト

Sリストのおかげで答え

「UCS2」エンコーディングを使用して、「0645」のように4文字ごとにデコードする必要があるということです。

そして私のコードは次のようなものです:

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());
            }
于 2014-04-23T08:26:12.473 に答える