Hexwerte ändern.

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.
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Leonidas hat geschrieben:Naja, schwer ist das jetzt wirklich nicht:

Code: Alles auswählen

f = open('save.dat', 'rb')
f.seek(0x1d)
player_name = f.read(0x20)
print player_name


Okay, verstehe ich das jetz richtig?

Seek, ist der Anfangspunkt ow er lesen soll read x20 die Stellen nach dem Endpunkt, also so zusagen der Endpunkt. Right?

und wie ändere ich das nun? f.write?

MFG
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

hab ich schon erwähnt, dass ich kein gutes englsich kann? :roll:

danke trotzdem ich Kämpfe mich dadurch., aber is nun meine obere Ausführung richtig? Und wenn ,wiso zeigt er trotzdem max x20 wenn ich darübergehe?

MFG
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du solltest wirklich versuchen die Dokumentation zu verstehen (Google Translate und Altavista Babelfish existieren - damit kannst du dir helfen lassen wenn es grad gar nicht weitergeht).
Mr.Wolna hat geschrieben:Seek, ist der Anfangspunkt ow er lesen soll read x20 die Stellen nach dem Endpunkt, also so zusagen der Endpunkt. Right?
Nein, ``seek()`` springt mit dem Dateizeiger an eine bestimmte Position, im dem Fall an 0x1D, also 29 und ließt dort 0x20 = 32 Byte aus.
Mr.Wolna hat geschrieben:und wie ändere ich das nun? f.write?
Jein. Du musst die Datei zum schreiben öffnen und achten dass du genau diese 32 Byte überschreibst. Also hinseeken und genau 32 Byte schreiben.

Oder wie gesagt, construct nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Beispiele?


entschuldigt, wenn ich mich blöd anstelle. Ich versuch es wirklich zu verstehen.

:oops:

MFG
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mr.Wolna hat geschrieben:Beispiele?
Beispiele für was?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Oh man. Siehe oben. `seek` wurde jetzt glaube ich schon ein paar mal erklärt. Und `write` kannst du dir aus den Beispielen ableiten. Versuchs doch einfach mal, durch Ausprobieren und Verstehen lernt man am besten.
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Ich versuchs meine Freude, ich versuchs.

Aber irgendwie ersetzt er nicht richtig. Der gibt zusätzlich Zeichen aus bzw. falsche. Irgendwas stimmt da nicht.

Code: Alles auswählen

#!/usr/bin/python


f = open('save.dat', 'r+b')
f.seek(0x1d)
f.write("AFFE")
player_name = f.read(0x20)
print player_name
MFG
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mr.Wolna hat geschrieben:Aber irgendwie ersetzt er nicht richtig. Der gibt zusätzlich Zeichen aus bzw. falsche. Irgendwas stimmt da nicht.
Na klar tut er das, weil du nur die ersten 4 Byte überschreibst. Die restlichen 32-4 = 28 Byte sind noch unverändert und tragen den alten Inhalt. Daher kommen die zusätzlichen Zeichen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

ganz ehrlich ich verzweifle grad, kann mir jemand ein Beispiel schreiben?


wie ich auf verschiedene werte zugreifen und diese überschreiben kann.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Mr.Wolna hat geschrieben:ganz ehrlich ich verzweifle grad, kann mir jemand ein Beispiel schreiben?
Mir zeigt das im Endeffekt nur, dass du dich mit der Aufgabenstellung überforderst. Geh es langsamer an und lerne Grundlagen. Experimentiere selber. Versuche (falsche) Ergebnisse zu interpretieren.

Wenn du fertige Lösungen bekommst hilft dir das nicht, da du sie nicht wirklich verstehst und dann auch noch sofort auf die nächste Idee springst mit der du dann wieder Schwierigkeiten hast.

Lerne lernen!
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

jo, ich weiß nur nicht wo ich anfangen soll. ich will das ergebniss des programms gleich sehen bzw. das es zu was nutze sit, und nicht irgenwelche calculatoren programmieren.


wie gesagt kp, ich würde gerne ypthon lernen. und so das grobe was eine sprache ausmacht weiß ich ,aber kein plan wo ich jetz anfangen soll.

mfg
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Leonidas hat geschrieben:
Mr.Wolna hat geschrieben:Aber irgendwie ersetzt er nicht richtig. Der gibt zusätzlich Zeichen aus bzw. falsche. Irgendwas stimmt da nicht.
Na klar tut er das, weil du nur die ersten 4 Byte überschreibst. Die restlichen 32-4 = 28 Byte sind noch unverändert und tragen den alten Inhalt. Daher kommen die zusätzlichen Zeichen.
ok, nach einem Spaziergang ist mein Kopf wieder klar und ich sehe was das Problem ist. Aber wie kann ich das umsetzten, wenn ich weniger als die vorgegebene bytegröße beschreibe, das die andeeren auf null gesetzt bzw. gelsöcht werden?

MFG
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mr.Wolna hat geschrieben:ok, nach einem Spaziergang ist mein Kopf wieder klar und ich sehe was das Problem ist. Aber wie kann ich das umsetzten, wenn ich weniger als die vorgegebene bytegröße beschreibe, das die andeeren auf null gesetzt bzw. gelsöcht werden?
Na einfach nicht weniger als 32 Bit schreiben, etwa so:

Code: Alles auswählen

player_name = "Larxene" + 25 * '\0'
Damit hast du den String auf 32 Byte aufgefüllt - nach dem Spielernamen stehen lauter Nullbytes. Achja, der Spielername darf sowieso nicht länger als 31 Zeichen lang sein, da das letzte, 32. Zeichen auch ein Nullbyte sein muss. Steht auch so in der von dir verlinkten Dokumentation.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Jo ist mir bewusst. Danke für die obere Erklärung. Die sit aber nicht flexibel, ich würde gerne per raw_input den namen eingeben können.

aber ich seh schon, mir fehl es eben an soclhen Elementaren Dinge. Das ich das automatisieren bzw, dynamishc machen könnte, aber ich versuchs^^

MFG

edit: ich brauch halt den Restwert, von 31 und der Anzahl des raw Inputs in eienr varaible oder?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mr.Wolna hat geschrieben:Jo ist mir bewusst. Danke für die obere Erklärung. Die sit aber nicht flexibel, ich würde gerne per raw_input den namen eingeben können.
Also komm, das war ein Beispiel. Das etwas Abstraktionsdenken wirst du wohl selbst hinebkommen

*sigh*

Ich seh schon, das wird nix. Aber du hast mich schon ziemlich gefrustet, das ist jetzt da letzte was ich zu dem Thema mache, da du wirklich nichtmal den Ansatz eines Versuches zeigst:

Code: Alles auswählen

player_name = raw_input("Benutzernamen eingeben: ")
if len(player_name) > 31:
    raise TypeError("Benutzername darf maximal 31 Zeichen lang sein")
binary = player_name + (32 - len(player_name)) * '\0'
f.seek(0x1d)
f.write(binary)
War das jetzt wirklich so schwer?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Kommt drauf an für wen. Aber du hast Recht SO wird das nichts, ich meine ich kann nicht für 2 sek Code einen Tag verbrauchen. Ich muss noch mehr die Grundlagen lernen.


Ich danke für deine Geduld. Und Frust ist wohl das richtige Wort für dieses ganzes "Spektakel".

MFG
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Mr.Wolna hat geschrieben:Kommt drauf an für wen. Aber du hast Recht SO wird das nichts, ich meine ich kann nicht für 2 sek Code einen Tag verbrauchen. Ich muss noch mehr die Grundlagen lernen.
Als ich anfing Python zu lernen war meine Absicht, Python im Web einzusetzen. Das habe ich auch getan, allerdings begannen meine ersten Experimente in dem Bereich erst nach 3 Monaten, nachdem ich die Grundlagen einigermaßen verstanden hatte. Von 0 auf 100 in einer Woche kann einfach nicht funktionieren.
Mr.Wolna
User
Beiträge: 93
Registriert: Dienstag 6. Oktober 2009, 17:43

Es ist nicht so, das ich davor nie was von einer Syntax gehört habe. Das Problem ist, das ich am besten praktisch lerne, und ich einfach nicht weiß wo und wie ich am besten anfangen kann.


MFG
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Antworten