Siemens S55 Addressbuch auslesen
Im Mai 2004 hatte ich mal versucht das Adressbuch meines Siemens S55 auszulesen. Die Daten sind in einer Datei mit dem Namen "5f07.adr" gespeichert, die sich z.B. mit der Date Suite auf den PC übertragen läßt. Nach ein Paar Stunden mit einem Hex-Editor kam folgendes Python-Script dabei heraus:
# Index der entsprechenden felder in der Datei VORNAME = 0 NACHNAME = 1 FIRMA = 2 STRASSE = 3 STADT = 4 LAND = 5 EMAIL1 = 8 EMAIL2 = 9 URL = 10 PLZ = 11 HOME_PHONE = 12 COMPANY_PHONE = 13 MOBILE_PHONE = 14 FAX1 = 15 FAX2 = 16 BIRTHDAY = 22 def phone_num(data): #Konvertiert eine BCD-kodierte Telefonnummer in einen String #(jede Ziffer wird durch 4 Bit dargestellt) res = "" for ch in data: i1 = ord(ch) & 0x0F i2 = (ord(ch) & 0xF0) >> 4 if (i1 != 0x0F): res += chr(i1 + ord('0')) if (i2 != 0x0F): res += chr(i2 + ord('0')) return res def read_header(fp): #der Header enthält die Längenangaben für die einzelnen Felder header = [] for i in range(28): header.append(ord(fp.read(1))) fp.read(1) return header def read_entry(fp): header = read_header(fp) if (header[0] == 0xdd): #unbenutzter Block while (True): ch = ord(fp.read(1)) if (ch != 0xdd): break fp.seek(-1,1) return data = [] for s in header: if s == 0: s = 2 line = fp.read(s) data.append(line) print "Vorname : ", unicode(data[VORNAME] ,'utf-16') print "Nachname: ", unicode(data[NACHNAME],'utf-16') print "Handy : ", phone_num(data[MOBILE_PHONE]) print "Fest : ", phone_num(data[HOME_PHONE]) print "Firma : ", phone_num(data[COMPANY_PHONE]) print "Geb. : ", data[BIRTHDAY] print "---------------------------------------" fp = file("5f07.adr","rb") fp.seek(0x42) for i in range(30): read_entry(fp) #print fp.tell()