Вот для Huawei E1550 функции кодирования/декодирования USSD - сообщения.
Оригинал приведен на
пришлось их несколько уточнить при проверке на VB на трансляторе SharpDevelop:
Public Function decodePDU(ByVal strIn As String) As String
Dim b As Byte = 0
Dim d As Byte = 0
Dim out As String = ""
Dim n As Integer
For n = 0 To strIn.Length - 1 Step 2
Dim tbyte As Byte = Val("&h" & strIn.Substring(n, 2))
Dim c As Byte = ((tbyte And ((1 << 7 - d) - 1)) << d) Or b
b = tbyte >> (7 - d)
out = out & Chr(c)
d = d + 1
If (d = 7) Then
out = out & Chr(b)
d = 0
b = 0
End If
Next
Return out
End Function
Public Function encodePDU(ByVal strIn As String) As String
Dim out As String = ""
Dim n As Integer
Dim s1 As Char
strIn = strIn + vbNullChar
For n = 0 To strIn.Length - 2
Dim t As Byte = n Mod 8 +1
If t = 8 Then Continue For
s1 = strIn.Substring(n, 1)
Dim c As Byte = Asc(strIn.Substring(n, 1)) >> (n Mod 8)
Dim b As Byte = Asc(strIn.Substring(n + 1, 1)) And ((1 << t) - 1)
c = (b << (8 - t)) Or c
out = out & (Hex(c)).PadLeft(2, "0").ToUpper
Next
Return out
End Function
Пример ( приведенные коды получены путем перехвата диалога программы Мегафона с оператором TELE2):
Запрос:
Sub Label2Click(sender As Object, e As EventArgs)
Dim s1 As String = ""
Dim sout As String = ""
s1 = "*105#"
sout = encodePDU(s1)
MsgBox(sout , MsgBoxStyle.OkOnly, "Encoder")
End Sub
Результат кодирования запроса: AA18AC3602
Ответ оператора:
Sub Label1Click(sender As Object, e As EventArgs)
Dim s1 As String = ""
Dim sout As String = ""
s1 = "CF2135487D2E41B1DCCC059381E02E"
sout = decodePDU(s1)
MsgBox(sout , MsgBoxStyle.OkOnly, "Decoder")
End Sub