-
Notifications
You must be signed in to change notification settings - Fork 0
ft_puthex
Marcos edited this page Oct 6, 2024
·
2 revisions
La función ft_puthex se encarga de imprimir un número en formato hexadecimal. Dependiendo del valor del parámetro format, el número se imprimirá en minúsculas (x) o mayúsculas (X). Esta función se utiliza en el proyecto ft_printf para manejar especificadores de formato hexadecimales.
#include "ft_printf.h"Se incluye el archivo de cabecera ft_printf.h para acceder a las funciones declaradas.
int ft_puthex(unsigned int num, char format)-
unsigned int num: El número que se desea imprimir en formato hexadecimal. -
char format: Especifica si el número se imprimirá en minúsculas ('x') o mayúsculas ('X').
Aquí está el código completo con comentarios para facilitar su comprensión:
#include "ft_printf.h"
/*
* Esta función imprime un número en formato hexadecimal.
* Dependiendo del valor de 'format', imprime en minúsculas ('x') o mayúsculas ('X').
*/
int ft_puthex(unsigned int num, char format)
{
// Variable que almacenará el número de caracteres impresos
int count;
// Variable para almacenar los dígitos hexadecimales
char *hex_digits;
// Inicializamos 'count' en 0
count = 0;
// Asignamos los dígitos hexadecimales según el formato ('x' o 'X')
if (format == 'x')
hex_digits = "0123456789abcdef"; // Minúsculas
else if (format == 'X')
hex_digits = "0123456789ABCDEF"; // Mayúsculas
else
return (-1); // Si el formato no es válido, retornamos un error
// Si el número es mayor o igual a 16, realizamos la conversión recursiva
if (num >= 16)
{
// Llamada recursiva para imprimir la parte alta del número
count += ft_puthex(num / 16, format);
// Llamada recursiva para imprimir la parte baja del número
count += ft_puthex(num % 16, format);
}
else
{
// Si el número es menor a 16, imprimimos el dígito hexadecimal correspondiente
count += ft_putchar(hex_digits[num]);
}
// Retornamos el número total de caracteres impresos
return (count);
}-
Selección del formato: Según el valor del parámetro
format, se selecciona si el número se imprimirá en minúsculas ("0123456789abcdef") o mayúsculas ("0123456789ABCDEF"). - Conversión recursiva: Si el número es mayor o igual a 16, la función se llama a sí misma para dividir el número en partes más pequeñas, dividiendo por 16 y usando el resto para obtener el dígito hexadecimal.
-
Impresión del dígito: Cuando el número es menor a 16, se imprime el dígito hexadecimal correspondiente, utilizando la función
ft_putchar. - Conteo: Se lleva un registro de la cantidad de caracteres impresos, que es el valor devuelto por la función.
Para entender mejor el funcionamiento de este bloque:
if (num >= 16)
{
count += ft_puthex(num / 16, format);
count += ft_puthex(num % 16, format);
}
else
{
count += ft_putchar(hex_digits[num]);
}Veamos un ejemplo con un número específico, por ejemplo, num = 254 (que en hexadecimal es fe).
-
Primera llamada a
ft_puthex(254, 'x'):-
numes mayor o igual a 16, por lo que entramos en la rama recursiva. -
Dividimos:
-
num / 16 = 254 / 16 = 15(parte entera, corresponde a'f'en hexadecimal). -
num % 16 = 254 % 16 = 14(corresponde a'e'en hexadecimal).
-
- Llamamos a
ft_puthex(15, 'x')y luego aft_puthex(14, 'x').
-
-
Segunda llamada a
ft_puthex(15, 'x'):-
numes menor a 16, por lo que no entramos en la recursión. - El número 15 corresponde a
'f'en el stringhex_digits = "0123456789abcdef". - Llamamos a
ft_putchar('f')y sumamos 1 al contador.
-
-
Tercera llamada a
ft_puthex(14, 'x'):-
numes menor a 16, por lo que no entramos en la recursión. - El número 14 corresponde a
'e'en el stringhex_digits = "0123456789abcdef". - Llamamos a
ft_putchar('e')y sumamos 1 al contador.
-
-
Primera llamada:
ft_puthex(254, 'x')→ Recursión conft_puthex(15, 'x')yft_puthex(14, 'x'). -
Segunda llamada:
ft_puthex(15, 'x')→ Imprime'f'. -
Tercera llamada:
ft_puthex(14, 'x')→ Imprime'e'.
En resumen, la secuencia es:
- Primero se imprime
'f'y luego'e', resultando en la cadena"fe".