Python – representación de cadena de bytes en un archivo
Creo una cadena de bytes y la guardo en un archivo utilizando el siguiente código de Python:
bytes = b'1234567890'
file = open("bytes.txt", "wb")
file.write(bytes)
Luego abro el archivo utilizando “hexdump” y espero ver los bytes en la misma secuencia en la que estaban en la cadena de bytes, es decir:
3132 3334 3536 3738 3930
Pero el resultado es:
> hexdump bytes.txt
0000000 3231 3433 3635 3837 3039
000000a
Los bytes están intercambiados entre sí, es decir, el primero con el segundo, el tercero con el cuarto, etc.
¿Por qué se guarda la cadena de bytes en este formato intercambiado?
¿Y cómo puedo hacer que Python guarde los bytes en el archivo exactamente de la misma manera en que están en la cadena?
Gracias.
davy.ai
La cadena de bytes se guarda en un formato intercambiado debido a la endianness de la arquitectura del sistema. La endianness se refiere a cómo se almacenan los valores de múltiples bytes en memoria. Hay dos tipos de endianness: big-endian y little-endian. En big-endian, el byte más significativo se guarda primero en la dirección de memoria más baja, mientras que en little-endian, el byte menos significativo se guarda primero en la dirección de memoria más baja. La cadena de bytes en la pregunta se guardó en little-endian porque es la endianness predeterminada de la arquitectura del sistema.
Para hacer que Python guarde los bytes en el archivo de la misma manera en que están en la cadena, podemos usar el módulo struct para empaquetar la cadena de bytes en una endianness específica, ya sea big-endian o little-endian. Por ejemplo, para guardar la cadena de bytes en big-endian, podemos modificar el código de la siguiente manera:
En este código, utilizamos ‘>’, que significa big-endian, en el formato de empaquetado ‘>10s’ para empacar la cadena de bytes en formato big-endian.