Lección
La teoría — Bytes en memoria: orden, tipos y direcciones
Un byte consta de ocho bits y representa un valor de 0 a 255. Cada dirección de memoria almacena uno. Un número que ocupa varios bytes utiliza direcciones consecutivas: cuatro para un entero de 32 bits. El orden de los bytes determina cómo se disponen. En little-endian, el byte menos significativo ocupa la dirección más baja; en big-endian, la ocupa el más significativo. Al interpretar cuatro bytes como entero sin signo, su valor es b₀·256⁰ + b₁·256¹ + b₂·256² + b₃·256³, donde bₖ es el byte que ocupa la posición k. Si la lectura es con signo, se resta 2³² cuando esa suma es igual o superior a 2³¹. Una lectura en coma flotante interpreta los mismos bits según la norma IEEE 754.
Qué significa cada símbolo
bₖ- el byte en la posición k, de 0 (la menos significativa) a 3
256ᵏ- su valor posicional: 1, 256, 65.536 o 16.777.216
- Supone
- Los enteros con signo usan complemento a dos y los números en coma flotante siguen el formato de precisión simple de IEEE 754, como en todos los procesadores actuales de ordenadores y teléfonos. El texto usa ASCII, con un byte por carácter; UTF-8, que hoy utiliza la mayoría de los archivos, puede necesitar hasta cuatro bytes para un solo carácter.
Problema resuelto al detalle
-
¿Qué tamaño tiene esta imagen? 4 pasos
Pulsa Cabecera PNG. Son los primeros 24 bytes de un archivo PNG. La especificación de PNG establece que todos los enteros que ocupen más de un byte se guardan en orden big-endian y que el bloque IHDR comienza con la anchura seguida de la altura, con cuatro bytes para cada una. Encuentra la anchura y la altura, y calcula qué dimensiones obtendría un programa que las leyera en orden little-endian.
Abre este problema en la herramienta
-
El archivo empieza con una firma de ocho bytes: 89 50 4E 47 0D 0A 1A 0A. Los cuatro bytes siguientes indican la longitud del primer bloque en orden big-endian: 00 00 00 0D vale 13. Después viene el tipo de bloque, 49 48 44 52, que como texto es IHDR. Por tanto, los datos del bloque empiezan en la dirección 16.
-
Anchura, direcciones de 16 a 19: 00 00 01 E0. En orden big-endian, el 01 ocupa la posición de valor 256¹ y E0, que vale 224, la de valor 256⁰: 256 + 224 = 480. La lectura de la herramienta en la dirección 16 muestra ese mismo resultado.
-
Altura, direcciones de 20 a 23: 00 00 01 0E, cuyo valor es 256 + 14 = 270.
-
En orden little-endian, el último byte pasa a ser el más significativo. La anchura sería 224 × 256³ + 1 × 256² = 3.758.161.920 y la altura, 14 × 256³ + 256² = 234.946.560.
Respuesta
480 × 270 píxeles. Leídos en orden little-endian, los mismos bytes indican 3.758.161.920 × 234.946.560, unos 8,83 × 10¹⁷ píxeles. A cuatro bytes por píxel, son 3,53 × 10¹⁸ bytes. El archivo no indica el orden de los bytes: lo establece la especificación, y el programa necesita esa información para leerlo.
-
Ruta de aprendizaje
Cómo ejecuta un programa un ordenador
Referencias (2)
- Where the names little-endian and big-endian come from, and the date the first insight gives: Danny Cohen, "On Holy Wars and a Plea for Peace." Internet Experiment Note IEN 137, 1 April 1980.
- The worked problem's file: the signature bytes, network byte order for every multi-byte integer, and the IHDR fields in order: W3C, "Portable Network Graphics (PNG) Specification (Third Edition)." W3C Recommendation, 24 June 2025.