-
-
Save parzibyte/7578ab3142031b0aed45f46f4e0c5a4e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Función que regresa el verdadero valor hexadecimal. | |
# Por ejemplo, si recibe un 15 devuelve f, y si recibe un número menor a 10, devuelve el número sin modificarlo | |
def obtener_caracter_hexadecimal(valor): | |
# Lo necesitamos como cadena | |
valor = str(valor) | |
equivalencias = { | |
"10": "a", | |
"11": "b", | |
"12": "c", | |
"13": "d", | |
"14": "e", | |
"15": "f", | |
} | |
if valor in equivalencias: | |
return equivalencias[valor] | |
else: | |
return valor | |
def decimal_a_hexadecimal(decimal): | |
hexadecimal = "" | |
while decimal > 0: | |
residuo = decimal % 16 | |
verdadero_caracter = obtener_caracter_hexadecimal(residuo) | |
hexadecimal = verdadero_caracter + hexadecimal | |
decimal = int(decimal / 16) | |
return hexadecimal | |
def obtener_valor_real(caracter_hexadecimal): | |
equivalencias = { | |
"f": 15, | |
"e": 14, | |
"d": 13, | |
"c": 12, | |
"b": 11, | |
"a": 10, | |
} | |
if caracter_hexadecimal in equivalencias: | |
return equivalencias[caracter_hexadecimal] | |
else: | |
return int(caracter_hexadecimal) | |
def hexadecimal_a_decimal(hexadecimal): | |
# Convertir a minúsculas para hacer las cosas más simples | |
hexadecimal = hexadecimal.lower() | |
# La debemos recorrer del final al principio, así que la invertimos | |
hexadecimal = hexadecimal[::-1] | |
decimal = 0 | |
posicion = 0 | |
for digito in hexadecimal: | |
# Necesitamos que nos dé un 10 para la A, un 9 para el 9, un 11 para la B, etcétera | |
valor = obtener_valor_real(digito) | |
elevado = 16 ** posicion | |
equivalencia = elevado * valor | |
decimal += equivalencia | |
posicion += 1 | |
return decimal | |
def decimal_a_octal(decimal): | |
octal = "" | |
while decimal > 0: | |
residuo = decimal % 8 | |
octal = str(residuo) + octal | |
decimal = int(decimal / 8) | |
return octal | |
def octal_a_decimal(octal): | |
decimal = 0 | |
posicion = 0 | |
# Invertir octal, porque debemos recorrerlo de derecha a izquierda | |
# pero for in empieza de izquierda a derecha | |
octal = octal[::-1] | |
for digito in octal: | |
valor_entero = int(digito) | |
numero_elevado = int(8 ** posicion) | |
equivalencia = int(numero_elevado * valor_entero) | |
decimal += equivalencia | |
posicion += 1 | |
return decimal | |
def decimal_a_binario(decimal): | |
if decimal <= 0: | |
return "0" | |
# Aquí almacenamos el resultado | |
binario = "" | |
# Mientras se pueda dividir... | |
while decimal > 0: | |
# Saber si es 1 o 0 | |
residuo = int(decimal % 2) | |
# E ir dividiendo el decimal | |
decimal = int(decimal / 2) | |
# Ir agregando el número (1 o 0) a la izquierda del resultado | |
binario = str(residuo) + binario | |
return binario | |
def binario_a_decimal(binario): | |
posicion = 0 | |
decimal = 0 | |
# Invertir la cadena porque debemos recorrerla de derecha a izquierda | |
# https://parzibyte.me/blog/2019/06/26/invertir-cadena-python/ | |
binario = binario[::-1] | |
for digito in binario: | |
# Elevar 2 a la posición actual | |
multiplicador = 2**posicion | |
decimal += int(digito) * multiplicador | |
posicion += 1 | |
return decimal | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment