Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created December 15, 2020 05:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/7578ab3142031b0aed45f46f4e0c5a4e to your computer and use it in GitHub Desktop.
Save parzibyte/7578ab3142031b0aed45f46f4e0c5a4e to your computer and use it in GitHub Desktop.
# 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