Meestal doe ik dit soort dingen in C ++, maar ik gebruik Python om een snel script te schrijven en ik ben tegen een muur aangelopen.
Als ik een binaire lijst heb (of wat dan ook, bewaart python het resultaat van een "fread"). Ik kan de individuele bytes erin openen met: buffer [0], buffer [1], enz.
Ik moet de bytes [8-11] wijzigen om een nieuwe 32-bits bestandsgrootte te behouden (lees: er is al een bestandsgrootte, ik moet het bijwerken). In C ++ zou ik alleen maar een verwijzing naar de locatie krijgen en deze weggooien om het gehele getal op te slaan, maar met python besefte ik opeens dat ik geen idee heb hoe ik zoiets moet doen.
Hoe kan ik 4 bytes in mijn buffer op een specifieke locatie bijwerken om de waarde van een integer in python te behouden?
Bewerken
Ik ga er meer aan toevoegen omdat ik er niet uit kan komen met de oplossingen (hoewel ik zie dat ze op de goede weg zijn).
Allereerst, ik ben op python 2.4 (en kan geen upgrade uitvoeren, servers van grote bedrijven) - zodat mijn opties blijkbaar worden beperkt. Sorry dat ik dat eerder niet heb vermeld, ik was me er niet van bewust dat het zoveel minder functies had.
Ten tweede, laten we dit ultraeenvoudig maken.
Laten we zeggen dat ik een binair bestand heb met de naam 'myfile.binary' met de vijfbytes inhoud '4C53535353' in hexadecimaal - dit komt overeen met de ascii-representaties voor letters "L en 4xS" die alleen in het bestand staan.
Als ik doe:
f = open('myfile.binary', 'rb')
contents = f.read(5)
inhoud zou (uit het antwoord van Sven Marnach) een vijf-byte onveranderlijke reeks moeten houden.
Alleen met Python 2.4-faciliteiten, hoe kon ik de 4 S's in 'inhoud' wijzigen in een willekeurige geheel getal? D.w.z. geef me een regel code waarmee byte-indexen [1-4] het 32-bits gehele getal 'myint' kunnen bevatten met waarde 12345678910.