Files
printf/strings.c
2023-08-23 00:05:09 +03:00

122 lines
1.7 KiB
C

#include "main.h"
/**
* printf_char - prints a char.
* @val: args.
* Return: 1.
*/
int printf_char(va_list val)
{
char s;
s = va_arg(val, int);
_putchar(s);
return (1);
}
/**
* printf_bin - binary number.
* @val: arguments.
* Return: 1.
*/
int printf_bin(va_list val)
{
/* inits */
int flag = 0;
int cont = 0;
int i, a = 1, b;
unsigned int num = va_arg(val, unsigned int);
unsigned int p;
for (i = 0; i < 32; i++)
{
p = ((a << (31 - i)) & num);
if (p >> (31 - i))
flag = 1;
if (flag)
{
b = p >> (31 - i);
_putchar(b + 48);
cont++;
}
}
if (cont == 0)
{
cont++;
_putchar('0');
}
return (cont);
}
/**
* printf_HEX - prints an hexgecimal number.
* @val: arguments.
* Return: counter.
*/
int printf_HEX(va_list val)
{
int i;
int *arr;
int counter = 0;
unsigned int num = va_arg(val, unsigned int);
unsigned int temp = num;
while (num / 16 != 0)
{
num /= 16;
counter++;
}
counter++;
arr = malloc(counter * sizeof(int));
for (i = 0; i < counter; i++)
{
arr[i] = temp % 16;
temp /= 16;
}
for (i = counter - 1; i >= 0; i--)
{
if (arr[i] > 9)
arr[i] = arr[i] + 7;
_putchar(arr[i] + '0');
}
free(arr);
return (counter);
}
#include "main.h"
/**
* printf_HEX_aux - prints an hexdecimal number.
* @num: number to print.
* Return: counter.
*/
int printf_HEX_aux(unsigned int num)
{
int i;
int *arr;
int counter = 0;
unsigned int temp = num;
while (num / 16 != 0)
{
num /= 16;
counter++;
}
counter++;
arr = malloc(counter * sizeof(int));
for (i = 0; i < counter; i++)
{
arr[i] = temp % 16;
temp /= 16;
}
for (i = counter - 1; i >= 0; i--)
{
if (arr[i] > 9)
arr[i] = arr[i] + 7;
_putchar(arr[i] + '0');
}
free(arr);
return (counter);
}