Normalmente realizo cosas como esta en C++, pero estoy usando python para escribir un script rápido y me he topado con un muro.Python, cómo poner entero de 32 bits en matriz de bytes
Si tengo una lista binaria (o cualquier pitón almacena el resultado de un "fread"). Puedo acceder a los bytes individuales en él con: buffer [0], buffer [1], etc.
Necesito cambiar los bytes [8-11] para mantener un nuevo tamaño de archivo de 32 bits (léase: ya hay un tamaño de archivo allí, necesito actualizarlo). En C++ solo obtendría un puntero a la ubicación y lo lanzaría para almacenar el entero, pero con Python de repente me di cuenta de que no tenía idea de cómo hacer algo como esto.
¿Cómo puedo actualizar 4 bytes en mi búfer en una ubicación específica para mantener el valor de un entero en python?
EDITAR
Voy a añadir más porque me parece que no puede comprenderlo a partir de las soluciones (aunque puedo ver que están en el camino correcto).
En primer lugar, estoy en Python 2.4 (y no puedo actualizar, servidores de grandes corporaciones), por lo que aparentemente limita mis opciones. Perdón por no mencionar eso antes, no sabía que tenía muchas menos funciones.
En segundo lugar, vamos a hacer esto ultra-simple.
Digamos que tengo un archivo binario denominado 'myfile.binary' con el contenido de cinco bytes '4C53535353' en hexadecimal - esto equivale a las representaciones ASCII para las letras "L y 4xS" estar solo en el archivo.
Si hago:
f = open('myfile.binary', 'rb')
contents = f.read(5)
contenidos deberían (de la respuesta de Sven Marnach) mantener una cadena inmutable de cinco bytes.
Usando únicamente las instalaciones de Python 2.4, ¿cómo podría cambiar las 4 S contenidas en 'contenidos' a un valor entero arbitrario? Es decir. Dame una línea de código que puede hacer que los índices de byte contenidos [1-4] contengan el entero de 32 bits 'myint' con el valor 12345678910.
no se puede cambiar el contenido ya que la cadena es inmutable ... puedes crear comió una nueva cuerda, o usó un contenedor mutable como bytearray. – hochl
Gracias, me complace crear una nueva cadena o conjunto de bytes si ese es el caso. ¿Cómo podría crear una matriz de bytes modificable con las mismas curvas y actualizar el rango [1-4] de esa para igualar la representación binaria de mi entero? –
Amplié mi publicación a continuación e incluí un ejemplo de trabajo para Python 2.4 :-) – hochl