无法读取AT命令响应

时间:2014-06-12 09:37:51

标签: decode gsm at-command ussd hyperterminal

我在Hyperterminal中测试了一些基本的AT命令。 GSM调制解调器也按照我的命令响应。但问题在于它向我展示了难以理解的文字。我使用以下代码:

AT
OK
AT+CUSD=1,"*247#",15
OK

+CUSD: 1,"0062004B006100730068000A00310020004D0032004D0020005400720061006E007300
6600650072000A0032002000440069007300620075007200730065000A00330020004D0079002000
62004B006100730068000A0034002000480065006C0070006C0069006E0065000A",72
AT+CUSD=1,"1",15
OK

AT+CUSD=1,"*247#",15命令应显示

  1. 菜单1
  2. 菜单2
  3. 菜单3
  4. 这样的事情。但它显示了十六进制代码,它不可读。我怎样才能获得纯文本?任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

根据提供的信息判断。当您使用15的DCS(数据编码方案)发送+ CUSD请求时,以及来自Bkash服务的DCS为72的响应。看起来您的调制解调器不支持来自Bkash的DCS中指定的编码。

我发现这个question是一个非常相似的问题和解决方案。尝试并确保将+ CSCS设置为类似IRA或GSM的内容,然后查看您的+ CUSD响应后会发生什么。

答案 1 :(得分:1)

使用以下功能解码" UCS2"回复数据:

    public static String HexStr2UnicodeStr(String strHex)
    {
        byte[] ba = Hex2ByteArray(strHex);
        return HexBytes2UnicodeStr(ba);
    }

    public static String HexBytes2UnicodeStr(byte[] ba)
    {
        var strMessage = Encoding.BigEndianUnicode.GetString(ba, 0, ba.Length);
        return strMessage;
    }

例如:

String str2 = SmsEngine.HexStr2UnicodeStr("0062004B006100730068000A00310020004D0032004D0020005400720061006E0073006600650072000A0032002000440069007300620075007200730065000A00330020004D007900200062004B006100730068000A0034002000480065006C0070006C0069006E0065000A");
// str2 = "bKash\n1 M2M Transfer\n2 Disburse\n3 My bKash\n4 Helpline\n"

请同时查看UnicodeStr2HexStr()

答案 2 :(得分:0)

嗨此代码称为PDU(协议数据单元)。解码它并不是直截了当的。你需要先了解结构。