stdlib es una libreria del estandar, no es nada externo.
cierto, no lo dije como deberia haberlo hecho. me referia mas bien a que no hace falta usar ninguna libreria para hacer esto que comentas.
Y si tengo una pregunta, ¿de donde sacas las mascaras?
no se si lo sabras, pero para pasar de binario a hexadecimal se cogen los bits en grupos de 4 (por lo que tienes un valor de 0 a 15 para cada agrupacion) y se pasa directamente al caracter hexadecimal. por ejemplo:
decimal: 12 -> binario: 0000(0) 1100(12 = C hex) -> hexadecimal: 0x0C
decimal: 67 -> binario: 0100(4) 0011(3) -> hexadecimal: 0x43
decimal: 179 -> binario: 1011(11 = B hex) 0011(3) -> hexadecimal: 0xB3
luego en cuanto a las mascaras, las mas simples son una AND (&) o una OR (|). para una AND, el resultado sera cierto (1) solo si los dos operandos son 1, y para los demas casos sera 0. en cuanto a la OR, solo sera falso (0) cuando los dos operandos son 0, y en cualquier otro caso sera 1.
te pondre un par de ejemplos mas:
si tienes un numero inicial 01100110 (102 en decimal), y quieres poner a 0 el bit 1 y 2 (en binario, el bit menos significativo es el de la derecha de todo y se considera el bit 0), entonces deberas aplicar una mascara AND con un numero que en esas posiciones tenga los bits en 0, y en todas las restantes tenga 1 para no alterar nada, ya que un AND con un 1 hara que el resultado siga como estaba, puesto que si estaba en 1 seria: 1&1=1 y si estaba en 0 seria: 1&0=0. por lo tanto, el numero que debemos usar para la mascara seria el 11111001, que es el 0xF9 en hexadecimal.
a=01100110
a&=0xF9 (a vale 01100000)
ahora imagina que quieres poner el bit 4 a 1, lo que deberias hacer es aplicar una mascara OR con un numero que tenga el bit en 1 en esa posicion, y las demas en 0 para no alterar nada mas, ya que si el bit estaba en 0: 0|0=0 y si estaba en 1: 1|0=1. este numero seria el 00010000, que es el 0x10 en hexadecimal.
a|=0x10 (a vale 01110000)
con esto y el operador shift (<< o >>) se pueden hacer infinidad de cosas a nivel de bits. la mas simple de todas, un simple programa que te pase de decimal a binario sin divisiones ni restos. (compila con un warning pero funciona bien, me daba pereza buscar el especificador de formato adecuado):
#include <stdio.h>
int main() {
unsigned char byte;
short int i;
printf("Ingresa un numero del 0-255: ");
for (i=7; i>=0; i--)
return 0;
}
con su salida:
:~$ ./dec2bin
Ingresa un numero del 0-255: 23
00010111
espero que te ayude, un saludo!