已以下指令为例
已知发送 USSD 的格式为:
Send USSD aaaxxxxxxxxxxxx*yyyyyyy#
;Fetch:==:SEND USSD
SEND 801200001F
ASSERT D01D81030112008202818305008A100F2A5C0DA782C564335ACDA6CAE57223 9000
;命令类型: Send USSD
;设备标识: SIM==>Network
;α标识符=()
;DCS=(0F)
;USSD String=(2A5C0DA782C564335ACDA6CAE57223)
; =(2A3835382A303132333435362A39393923)
首先对ASSERT指令进行拆解:
ASSERT D01D81030112008202818305008A100F2A5C0DA782C564335ACDA6CAE57223
Proactive command
命令类型 12 : SEND USSD
============================
命令细节
----------------------------
命令细节标记 81
长度="03" 03
命令代码 01
命令类型 12
命令限定符 00 RFU
============================
设备标识
----------------------------
设备标识标记 82
长度="02" 02
起始端设备标识 81:UICC;
目的端设备标识 83:Network;
============================
α标识符
----------------------------
α标识符标记 05
长度 00
α标识符
============================
USSD字符串
----------------------------
USSD字符串标记 8A
长度 10
TON和NPI 0F
USSD字符串 2A5C0DA782C564335ACDA6CAE57223
然后对USSD 字符串使用7bit解码方式进行解析,即可得到发送的原始数据:
USSD字符串 2A5C0DA782C564335ACDA6CAE57223
解析后的字符串 *858*0123456*999#
注:
GSM默认采用7bit编码,实际上,7位编码是种压缩算法,因为,ASCII码(不包括扩展ASCII),其值小于0x80,最高位bit8是0,被忽略了;而7bit编码就利用了这一位来存储数据;其编码时,依次将下一7位编码的后几位逐次移至前面,形成新的8位编码。