/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_ntoa.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: gvoelkne +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2026/05/01 08:25:10 by gvoelkne #+# #+# */ /* Updated: 2026/05/07 09:28:37 by gvoelkne ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_printf.h" static unsigned long get_positive(long n) { if (n < 0) return (-(unsigned long)n); return (n); } static char *ntoa(long num, int base, char *res, unsigned int res_size) { int is_neg; unsigned long n; unsigned long curr; curr = 0; is_neg = 0; if (num < 0) is_neg = 1; n = get_positive(num); res[--res_size] = '\0'; while (n > 0) { curr = n % base; if (curr > 9) curr = (curr - 10) + 'A'; else curr += '0'; res[(res_size - 1)] = curr; n /= base; res_size -= 1; } if (is_neg) res[0] = '-'; return (res); } char *ft_ntoa(long num, int base) { int is_neg; char *res; unsigned int res_size; unsigned long n; unsigned long curr; n = get_positive(num); if (n == 0) return (ft_strdup("0")); curr = 0; is_neg = 0; if (num < 0) is_neg = 1; res_size = ft_calc_digits(n, base) + 1 + is_neg; res = malloc(sizeof(char) * res_size); return (ntoa(num, base, res, res_size)); }