Applications pratiques de l'hexadécimal en Python
Maintenant que vous avez appris à formater les valeurs hexadécimales en Python, explorons quelques applications pratiques où le formatage hexadécimal est particulièrement utile.
1. Travailler avec les valeurs de couleur RVB
L'hexadécimal est couramment utilisé pour représenter les couleurs dans le développement web et la programmation graphique. Les valeurs de couleur RVB peuvent être représentées sous forme de triplets hexadécimaux au format #RRGGBB
.
Créons un script pour démontrer comment travailler avec les couleurs en utilisant l'hexadécimal :
- Dans WebIDE, créez un nouveau fichier nommé
hex_color_converter.py
dans le répertoire /home/labex/project
.
- Ajoutez le code suivant au fichier :
## 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}")
- Enregistrez le fichier.
- Exécutez le script :
python3 hex_color_converter.py
La sortie affichera les conversions entre les formats de couleur RVB et hexadécimal :
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. Travailler avec des données binaires et des opérations sur les fichiers
L'hexadécimal est souvent utilisé lorsque l'on travaille avec des données binaires, telles que le contenu de fichiers ou les paquets réseau. Créons une simple visionneuse de fichiers hexadécimaux :
- Dans WebIDE, créez un nouveau fichier nommé
hex_file_viewer.py
dans le répertoire /home/labex/project
.
- Ajoutez le code suivant au fichier :
## 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.")
- Enregistrez le fichier.
- Exécutez le script :
python3 hex_file_viewer.py
La sortie affichera un vidage hexadécimal de l'exemple de fichier binaire :
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.
Cette visionneuse hexadécimale affiche à la fois la représentation hexadécimale de chaque octet et son équivalent ASCII, ce qui est un format courant pour examiner les données binaires.
Ces exemples pratiques démontrent comment le formatage hexadécimal peut être utile dans les applications Python du monde réel. De la manipulation des couleurs à l'analyse des données binaires, l'hexadécimal fournit un moyen compact et efficace de représenter et de travailler avec divers types de données.