USSD命令翻译

时间:2014-04-21 16:25:32

标签: c# decode at-command ussd

我需要帮助解码收到的回复。

at
OK
+CUSD: 0,"ar@?$  @9@d? ?@ ???(d??)@@1pD?"?T?Hc@
                                           ?&  ?@D??? ?@??5 41 IA ?R",17

OK
+CUSD: 0,"ar?hb? ?'  10?@ ? ?hb@?J@@?@?? @f@??@?@S@d$@",17

我在另一个网络提供商的dcs值为72时尝试过。 但这个值17我不明白。 如何解码?

结果后:

AT+CSCS="UCS2"
OK        
at+cusd=1,"002a003100350030002a0032002a00330032003300390031002a00360039003100370037002a00310023",15

+CUSD: 0,"00610072003f00680062003f0020003f00270020002000310030003f00400020003f0020003f006800620040003f004a00400040003f0040003f003f0020004000660040003f003f0040003f004000530040006400240040",17
AT+CSMP?
+CSMP: 17,167,0,0

OK

当我设置我的AT + CSCS =" UTF-8"它报告错误但是 用AT / CSCS =?

命令报告回来

2 个答案:

答案 0 :(得分:1)

回复的格式符合27.007

+CUSD=[<n>[,<str>[,<dcs>]]]

因此第三个参数是<dcs>。它的格式只是推迟了:

<dcs>: 3GPP TS 23.038 [25] Cell Broadcast Data Coding Scheme in integer format
(default 0)

在23.038的“5 CBS数据编码方案”一章中,它指出These codings may also be used for USSD

对于17,二进制0001 0001:

  • bit 7..4编码组位= 0001
  • bit 3..0 = 0001 - &gt; UCS2;以语言指示开头的信息

并注意到

  

不支持UCS2编码的MS将显示两个字符语言标识符,后跟不正确解释的用户数据。

这与输出中的情况完全相同(例如ar表示阿拉伯语后跟垃圾)。

对于72,二进制0100 1000:

  • bit 7..4编码组位= 01xx
  • bit 5 = 0 - &gt;未压缩的,
  • bit 4 = 0 - &gt;没有阶级意义
  • bit 3&amp; 2 = 1&amp; 0 - &gt; UCS2(16位)

上面的“不支持”部分可能就是您正在使用有限的字符集编码(PCCP437)。在任何情况下,除非你的调制解调器不支持UTF-8,你真的应该使用它,而不是这个PCCP437。或者您可以使用USC2。如果您的调制解调器缺少这两个字符,您可以尝试HEX(根据我在研究此答案时所看到的内容猜测,也许您需要在AT + CSMP中设置<dcs>参数才能使其正常工作?)。

请注意,选择UCS2后,每个字符串必须以这种方式编码,包括切换到另一个字符集,请参阅this answer以获取示例。

答案 1 :(得分:0)

使用以下函数解码“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 str1 = SmsEngine.HexStr2UnicodeStr("002a003100350030002a0032002a00330032003300390031002a00360039003100370037002a00310023");
// str1 = "*150*2*32391*69177*1#"

请同时查看UnicodeStr2HexStr()