Seite 1 von 1

int('0x61') nicht möglich... int('97') und int(0x61) schon..

Verfasst: Donnerstag 4. Februar 2010, 22:47
von christian1722
in einem konsolenbasierten programm welches ich geschrieben habe gibt es eine for schleife, in der ein hex wert string, der ungefähr so aussieht:

'0x61 0x34 0x34 0x61 0x63 0x62 0x61'

mittels int() und chr() in buchstaben konvertiert(ist das das richtige wort dafür?) werden soll...

ich habe das so gelößt:

Code: Alles auswählen

    zuentschlusseln_str=raw_input("Bitte geben sie den zu entschlüsselnden code ein... ") '''hier wird der Hex-String eingegeben'''
    entschlusselt_list=[]
    zuentschlusseln_list=zuentschlusseln_str.split() '''hier wird der hex-string in eine liste überführt'''
    for i in zuentschlusseln_list:
        zuentschlusseln_zeichen_int=int(i) '''hier liegt das problem... es soll in eine integer zahl konvertiert werden'''
        entschlusselt_zeichen_str=chr(zuentschlusseln_zeichen_int) '''hier würde die integer zahl in einen buchstaben konveriert werden'''
        entschlusselt_list.append(entschlusselt_zeichen_str) '''hier werden die einzelnen buchstaben in einer liste zusammengefasst'''
    entschlusselt_str="".join(entschlusselt_list) '''hier wird aus der liste ein string'''
    print entschlusselt_str '''hier wird der string ausgegeben...'''

Verfasst: Donnerstag 4. Februar 2010, 22:50
von cofi
Dein Code ist reichlich schwer zu lesen, deshalb lass ich mal die Glaskugel sprechen: Kann es sein, dass du das suchst?

Code: Alles auswählen

>>> a = '0xF'
>>> int(a, 16)
15

Verfasst: Donnerstag 4. Februar 2010, 22:55
von christian1722
das wusste ich wozu gibt es denn help()...

nein es soll ja in einen buchstaben "verwandelt" werden...

0x61 wäre ja 97 und das entspricht a aber wenn ich jetzt sage: int(0x61,16) dann kommt da 151 raus und 151!=97...

edit: okay hat sich erledigt hab ich wohl bein ausprobieren was falsch eingegeben... trotzdem danke...

andere frage oop will einfach nicht in meinen kopf rein... kennt jemand ne kinderleichtverständliche erklärung für oop im bezug auf python?

Verfasst: Donnerstag 4. Februar 2010, 23:34
von gkuhl
Hallo Christian,

noch ein paar Anmerkungen zu deinem Code:
(1) Verwende bitte den Python Code Tag, wenn du hier postest.
(2) Für Kommentare verwende bitte das Rautezeichen, wenn es kein Documentation String sein soll
(3) Verwende mehr Leerzeichen für bessere Lesbarkeit.
(4) Namen/Bezeichner sind in Python an keinen Typ gebunden, daher sind Anhänge wie ``_lst`` oder ``_str`` nicht sinnvoll. Verwende stattdessen einen eindeutigen Namen, am besten ein Nomen. Ich würde ``code`` vorschlagen.
(5) Das ganze lässt sich noch mit ``list comprehensions`` verkürzen. Zum Beispiel zu:

Code: Alles auswählen

code = raw_input("Bitte geben Sie den zu entschlüsselnden Code ein... ")
code = [int(n, 16) for n in code.split()]
code = ''.join((str(n) for n in code))
print code
Grüße
Gerrit

Verfasst: Donnerstag 4. Februar 2010, 23:41
von christian1722
ja ich habe mich heute erst hier angemeldet...

bitte entschuldige mich dafür, aber ich wusste nicht wie das hier funktioniert... normalerweise nehme ich auch # aber hier gingen sie über mehrere zeilen... aber egal...

ja wie gesagt ich lerne noch python und wollter erst einmal das so machen wie ich es für richtig halte... kannst du mir das mit den listcomprhesions mal bitte erklären...(an diesem beispiel...)

Verfasst: Donnerstag 4. Februar 2010, 23:52
von gkuhl
List Comprehension ist ein kurzer Weg um eine Liste zu erstellen. Für mehr Details schaust du am besten in das offizielle Tutorial oder in das Buch deines Vertrauens. Die Zeile 2 in meinem Codebeispiel ist Abkürzung für:

Code: Alles auswählen

liste = []
for n in code:
    liste.append(int(n, 16))

Verfasst: Freitag 5. Februar 2010, 00:02
von christian1722
ja ich lese grade das open book auf wikibooks

das heißt python unter linux...

abop habe ich auch schon gelesen...

Verfasst: Freitag 5. Februar 2010, 00:54
von BlackVivi
christian1722 hat geschrieben:edit: okay hat sich erledigt hab ich wohl bein ausprobieren was falsch eingegeben... trotzdem danke...
Nein, nicht falsch eingegeben. Das was du benutzt hast war'n Hexadeximalliteral, was als int der Basis 10 natürlich 97 darstellt.

Code: Alles auswählen

In [1]: 0x61
Out[1]: 97
Wenn wir 97 nun als Zahl der Basis 16 intepretieren lassen, kommt deine "magische Zahl" 151 heraus.

Also hast du irgendwie das Hexadezimalliteral mit reinschleichen lassen, anstatt einen String mit einer Zahl in der Hexadizimalform zu nehmen.

Aber vielleicht irr' ich mich. Es würde aber definitiv Sinn ergeben.

Verfasst: Freitag 5. Februar 2010, 01:01
von christian1722
warum magische zahl?