void ft_put_line_number(int last) { int i; t_ucc *convert; int nb_char; int max; if (gbl_mode(GET, 0) == HEX) max = 7; else max = 8; nb_char = ft_nb_char(0); i = 0; convert = (t_ucc*)"0123456789abcdef"; if (has_printed()) write(1, "\n", 1); if (!ft_nb_char(0) && last) return ; while (i < max) { write(1, convert + ((nb_char / pow_16((max - 1) - i)) % 16), 1); i++; } if (last) write(1, "\n", 1); }
static void print_num(size_t num_digit, uint64_t n, char *to_return, int is_upcase) { size_t i; size_t istr; unsigned char digit; i = num_digit; istr = 0; while (i > 0) { digit = n / pow_16(i - 1); n = n % pow_16(i - 1); to_return[istr] = get_char(digit, is_upcase); ++istr; --i; } to_return[num_digit] = '\0'; }
void ft_itoa_hex(uint64_t n, int is_upcase, char *buff) { size_t num_digit; uint64_t nb; num_digit = 1; nb = n; if (n > 1152921504606846976) num_digit = 15; else { while (pow_16(num_digit) <= nb) ++num_digit; } print_num(num_digit, nb, buff, is_upcase); }