Aplicaciones Prácticas del Hexadecimal en Python
Ahora que has aprendido a formatear valores hexadecimales en Python, exploremos algunas aplicaciones prácticas donde el formateo hexadecimal es particularmente útil.
1. Trabajando con Valores de Color RGB
El hexadecimal se utiliza comúnmente para representar colores en el desarrollo web y la programación de gráficos. Los valores de color RGB se pueden representar como triplos hexadecimales en el formato #RRGGBB.
Creemos un script para demostrar cómo trabajar con colores usando hexadecimal:
- En WebIDE, crea un nuevo archivo llamado
hex_color_converter.py en el directorio /home/labex/project.
- Añade el siguiente código al archivo:
## Working with RGB color values using hexadecimal
def rgb_to_hex(r, g, b):
"""Convert RGB values to a hexadecimal color string."""
## Ensure values are within valid range (0-255)
r = max(0, min(255, r))
g = max(0, min(255, g))
b = max(0, min(255, b))
## Create hex string with ## prefix
return f"#{r:02x}{g:02x}{b:02x}"
def hex_to_rgb(hex_color):
"""Convert a hexadecimal color string to RGB values."""
## Remove ## if present
hex_color = hex_color.lstrip('#')
## Convert hex to decimal
if len(hex_color) == 3: ## Handle shorthand hex (#RGB)
r = int(hex_color[0] + hex_color[0], 16)
g = int(hex_color[1] + hex_color[1], 16)
b = int(hex_color[2] + hex_color[2], 16)
else: ## Handle full hex (#RRGGBB)
r = int(hex_color[0:2], 16)
g = int(hex_color[2:4], 16)
b = int(hex_color[4:6], 16)
return (r, g, b)
## Example usage
print("RGB to Hex Color Conversion Examples:")
print("-" * 40)
## Common colors
colors = [
(255, 0, 0), ## Red
(0, 255, 0), ## Green
(0, 0, 255), ## Blue
(255, 255, 0), ## Yellow
(255, 0, 255), ## Magenta
(0, 255, 255), ## Cyan
(255, 255, 255), ## White
(0, 0, 0) ## Black
]
## Convert and display each color
for rgb in colors:
hex_color = rgb_to_hex(*rgb)
print(f"RGB: {rgb} → Hex: {hex_color}")
print("\nHex to RGB Color Conversion Examples:")
print("-" * 40)
## List of hex colors to convert
hex_colors = ["#ff0000", "#00ff00", "#0000ff", "#ff0", "#f0f", "#0ff"]
for hex_color in hex_colors:
rgb = hex_to_rgb(hex_color)
print(f"Hex: {hex_color} → RGB: {rgb}")
## Color blending example
print("\nColor Blending Example:")
print("-" * 40)
def blend_colors(color1, color2, ratio=0.5):
"""Blend two colors according to the given ratio."""
r1, g1, b1 = hex_to_rgb(color1)
r2, g2, b2 = hex_to_rgb(color2)
r = int(r1 * (1 - ratio) + r2 * ratio)
g = int(g1 * (1 - ratio) + g2 * ratio)
b = int(b1 * (1 - ratio) + b2 * ratio)
return rgb_to_hex(r, g, b)
## Blend red and blue with different ratios
red = "#ff0000"
blue = "#0000ff"
print(f"Color 1: {red} (Red)")
print(f"Color 2: {blue} (Blue)")
for i in range(0, 11, 2):
ratio = i / 10
blended = blend_colors(red, blue, ratio)
print(f"Blend ratio {ratio:.1f}: {blended}")
- Guarda el archivo.
- Ejecuta el script:
python3 hex_color_converter.py
La salida mostrará conversiones entre formatos de color RGB y hexadecimal:
RGB to Hex Color Conversion Examples:
----------------------------------------
RGB: (255, 0, 0) → Hex: #ff0000
RGB: (0, 255, 0) → Hex: #00ff00
RGB: (0, 0, 255) → Hex: #0000ff
RGB: (255, 255, 0) → Hex: #ffff00
RGB: (255, 0, 255) → Hex: #ff00ff
RGB: (0, 255, 255) → Hex: #00ffff
RGB: (255, 255, 255) → Hex: #ffffff
RGB: (0, 0, 0) → Hex: #000000
Hex to RGB Color Conversion Examples:
----------------------------------------
Hex: #ff0000 → RGB: (255, 0, 0)
Hex: #00ff00 → RGB: (0, 255, 0)
Hex: #0000ff → RGB: (0, 0, 255)
Hex: #ff0 → RGB: (255, 255, 0)
Hex: #f0f → RGB: (255, 0, 255)
Hex: #0ff → RGB: (0, 255, 255)
Color Blending Example:
----------------------------------------
Color 1: #ff0000 (Red)
Color 2: #0000ff (Blue)
Blend ratio 0.0: #ff0000
Blend ratio 0.2: #cc0033
Blend ratio 0.4: #990066
Blend ratio 0.6: #660099
Blend ratio 0.8: #3300cc
Blend ratio 1.0: #0000ff
2. Trabajando con Datos Binarios y Operaciones de Archivos
El hexadecimal se utiliza a menudo cuando se trabaja con datos binarios, como el contenido de archivos o paquetes de red. Creemos un simple visor de archivos hexadecimales:
- En WebIDE, crea un nuevo archivo llamado
hex_file_viewer.py en el directorio /home/labex/project.
- Añade el siguiente código al archivo:
## Hexadecimal file viewer
def hex_dump(data, bytes_per_line=16, offset=0):
"""Create a hex dump of binary data."""
result = []
for i in range(0, len(data), bytes_per_line):
chunk = data[i:i+bytes_per_line]
## Hex representation
hex_part = ' '.join(f'{b:02x}' for b in chunk)
## ASCII representation
ascii_part = ''.join(chr(b) if 32 <= b <= 126 else '.' for b in chunk)
## Add line to result
line = f"{offset+i:08x}: {hex_part:<{bytes_per_line*3}} |{ascii_part}|"
result.append(line)
return '\n'.join(result)
def create_sample_file():
"""Create a sample binary file for demonstration."""
file_path = "/home/labex/project/sample.bin"
## Create some sample data containing:
## - Some text
## - A range of values from 0-255
sample_data = bytearray(b"This is a sample binary file.\n")
sample_data.extend(range(0, 256))
## Write to file
with open(file_path, 'wb') as f:
f.write(sample_data)
return file_path
def view_file_as_hex(file_path, max_bytes=256):
"""View a portion of the file as a hex dump."""
try:
with open(file_path, 'rb') as f:
data = f.read(max_bytes)
print(f"Hex dump of the first {len(data)} bytes of {file_path}:")
print("-" * 70)
print(hex_dump(data))
if max_bytes < 256:
print(f"\nOnly showing first {max_bytes} bytes. Adjust max_bytes parameter to see more.")
except FileNotFoundError:
print(f"Error: File '{file_path}' not found.")
except Exception as e:
print(f"Error reading file: {e}")
## Create a sample file and view it
sample_file = create_sample_file()
view_file_as_hex(sample_file, 128)
## Information about the "hex" command in Linux
print("\nFun fact: In Linux, you can use the 'hexdump' or 'xxd' commands")
print("to view binary files in hexadecimal format directly from the terminal.")
- Guarda el archivo.
- Ejecuta el script:
python3 hex_file_viewer.py
La salida mostrará un volcado hexadecimal del archivo binario de muestra:
Hex dump of the first 128 bytes of /home/labex/project/sample.bin:
----------------------------------------------------------------------
00000000: 54 68 69 73 20 69 73 20 61 20 73 61 6d 70 6c 65 |This is a sample|
00000010: 20 62 69 6e 61 72 79 20 66 69 6c 65 2e 0a 00 01 | binary file...|
00000020: 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 |................|
00000030: 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 |.............. !|
00000040: 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 |"#$%&'()*+,-./01|
00000050: 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 |23456789:;<=>?@A|
00000060: 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 |BCDEFGHIJKLMNOPQ|
00000070: 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 |RSTUVWXYZ[\]^_`a|
Fun fact: In Linux, you can use the 'hexdump' or 'xxd' commands
to view binary files in hexadecimal format directly from the terminal.
Este visor hexadecimal muestra tanto la representación hexadecimal de cada byte como su equivalente ASCII, que es un formato común para examinar datos binarios.
Estos ejemplos prácticos demuestran cómo el formateo hexadecimal puede ser útil en aplicaciones Python del mundo real. Desde la manipulación del color hasta el análisis de datos binarios, el hexadecimal proporciona una forma compacta y eficiente de representar y trabajar con varios tipos de datos.