Hi BlackJack,
ich geb dir vollkommen recht, dass der Code gruselig ist. Aber ich wusste mir nicht anders zu helfen. Der schlimmste Teil ist das Skript, welches is mir aus dem Netz gezogen habe um aus HEX die Binärwerte zu machen. Und ich glaube da liegt auch mein Fehler, warum das Ergebnis nicht stimmt.
zu deinen Anmerkungen:
-die Bitoperationen macht mein Skript dank HerrHagen ja und das sieht auch gut aus, bis auf den Rest den er immer noch als letztes Element speichert, aber den kann man getrost vergessen
-chr() verwende ich ja auch schon am Ende und soweit ich das verstanden habe, kann ich sogar den "normalen" chr nehmen, da die geheimnisvolle Kodierung durch das shiften in den Bits geschieht.
-ord() hier weiss ich leider nichts mit anzufangen....die Funktion liefert den int zu einem HEX-Wert, aber dann habe ich immernoch keine Binärdarstellung. Ich habe nun mal den Ansatz versucht, aber das Ergebnis passt immer noch nicht.
Code: Alles auswählen
import string, binascii, re
# converts a denary integer n into a binary string bStr
def Denary2Binary(n):
bStr = ''
if n < 0: raise ValueError, "must be a positive integer"
if n == 0: return '0'
while n > 0:
bStr = str(n % 2) + bStr
n = n >> 1
return bStr
# decodes the PDU Message to a readable message
def pduSMS(smsMessage, messageLenght, path):
pdu_fobj = open(path + "/cuttedPieces_ASCII/pdu.ascii", "a")
pdu_fobj.write(smsMessage + "\n")
# String to HEX
smsMessage = smsMessage.decode("hex")
# HEX -> BIN 8-bit
bin8sms = ""
for part in smsMessage:
ordpart = ord(part)
bin = Denary2Binary(ordpart)
bin8sms = bin8sms + bin
# split BIN string in parts with length of 8 digits
part = ""
i = 0
k = 0
while k < len(bin8sms):
k = i + 8
for j in range(i, i+8):
if k < len(bin8sms):
part = part + bin8sms[j]
else:
rest = (len(bin8sms) % 8)
for m in range(i, i + rest):
part = part + bin8sms[m]
break
part = part + ";"
i = i+8
# BIN 8-bit -> BIN 7-bit
l = part.split(";")
for i in range(len(l) - 1):
l[i+1] += l[i][:i+1]
l[i] = l[i][i+1:]
bin7sms = str(l)
# BIN 7-bit -> DEC
i = 0
decsms = ""
while i < len(l):
if i <= len(l) and l[i] != "":
decsms = decsms + str(int(l[i], 2)) + ";"
i += 1
else:
break
# DEC -> ASCII
asciisms = ""
n = decsms.split(";")
for p in range(len(n) - 2):
char = int(n[p])
if char < 256:
asciisms = asciisms + chr(char) + ";"
pdu_fobj.write("ascii: " + asciisms + "\n")
pdu_fobj.close()