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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
christian1722
User
Beiträge: 5
Registriert: Donnerstag 4. Februar 2010, 22:17

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...'''
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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
christian1722
User
Beiträge: 5
Registriert: Donnerstag 4. Februar 2010, 22:17

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?
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

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
christian1722
User
Beiträge: 5
Registriert: Donnerstag 4. Februar 2010, 22:17

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...)
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

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))
christian1722
User
Beiträge: 5
Registriert: Donnerstag 4. Februar 2010, 22:17

ja ich lese grade das open book auf wikibooks

das heißt python unter linux...

abop habe ich auch schon gelesen...
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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.
christian1722
User
Beiträge: 5
Registriert: Donnerstag 4. Februar 2010, 22:17

warum magische zahl?
Antworten