delete delete

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
zulu321
gelöscht
Beiträge: 13
Registriert: Samstag 23. Januar 2010, 23:02

delete delete
Zuletzt geändert von zulu321 am Sonntag 18. April 2010, 18:27, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo!

Du musst zwischen der Darstellung und dem Inhalt unterscheiden:

Code: Alles auswählen

>>> "".join(map(chr, (192, 168, 1, 12)))
'\xc0\xa8\x01\x0c'
>>> chr(192)
'\xc0'
>>> repr("\xc0")
"'\\xc0'"
Das Leben ist wie ein Tennisball.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

zulu321 hat geschrieben:hex(120) würde 0x78 ergeben, weshalb ich die ersten beiden Stellen abschneiden muss um an die 78 zu kommen. scapy verlangt dort ausdrücklich \x78. Leider funktioniert das obige Konstrukt nicht, da er scheinbar nach "\x" sofort eine Zahl möchte. Auch "\xc0\xa8\x01" + hex(zähler)[1:] habe ich schon getestet, ohne Erfolg.
Die Sache ist die, dass in dem String nirgends \x78 steht. Diese Sequenz weist den Interpreter an, ein Byte mit dem Wert 120 in den String einzubauen. Ein "\x" + "78" hingegen bewirkt, dass da wirklich \x78 in dem String steht. Was du brauchst ist ord.

Code: Alles auswählen

"\xc0\xa8\x01" + ord(120)
EyDu hat geschrieben:Du musst zwischen der Darstellung und dem Inhalt unterscheiden:
Wobei das Beispiel irreführend ist, da Python in dem Fall sowieso schon repr anwendet um die Strings darzustellen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Darii hat geschrieben:Du musst zwischen der Darstellung und dem Inhalt unterscheiden:
Wobei das Beispiel irreführend ist, da Python in dem Fall sowieso schon repr anwendet um die Strings darzustellen.[/quote]
Ich wollte auf das "\" hinaus, aber für einen Anfänger ist das Beispiel wohl wirklich etwas zu verwirrend. So etwas trifft es wohl besser:

Code: Alles auswählen

>>> x = "\\x50"
>>> y = "\x50"
>>> print x
\x50
>>> print y
P
Das Leben ist wie ein Tennisball.
zulu321
gelöscht
Beiträge: 13
Registriert: Samstag 23. Januar 2010, 23:02

delete delete
Zuletzt geändert von zulu321 am Sonntag 18. April 2010, 18:27, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

zulu321 hat geschrieben:Leider zu früh gefreut. Bei chr(120) gibt er das Zeichen 'x' aus und nimmt nicht mehr die Hex-Werte.
Richtig. Denn "x" ist genau das selbe wie chr(120) oder "\x78". Das sind alles verschiedene Darstellungen für den selben Wert

Code: Alles auswählen

>>> "\x78" == "x"
True
>>> chr(120) == "x"
True
>>>
Zu deinem ord-Hinweis: http://docs.python.org/library/functions.html#ord
Das Leben ist wie ein Tennisball.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

zulu321 hat geschrieben:ord() scheint nur einzelne Zeichen zu mögen.
Upps..da hab ich die Funktionen durcheinandergeworfen, chr ist das was du suchst und ord ist die Umkehrfunktion dazu
zulu321
gelöscht
Beiträge: 13
Registriert: Samstag 23. Januar 2010, 23:02

delete delete
Antworten