C: Convertir de decimal a hexadecimal usando operaciones bitwise

Tengo que convertir un número decimal a octal y hexadecimal usando operaciones bitwise. Sé cómo convertirlo en binario:

char * decToBin(int n) { unsigned int mask=128; char *converted; converted=(char *) malloc((log((double) mask)/log((double) 2))*sizeof(char)+2); strcpy(converted,""); while(mask > 0) { if(mask & n) strcat(converted,"1"); else strcat(converted,"0"); mask >>= 1; } return converted; } 

¿Puedes ayudarme a convertir de decimal a hexadecimal? ¿Cuál debería ser la idea básica? ¿Es posible usar una máscara para eso? Gracias.

Podrías “hacer trampa” y usar sprintf :

 char *conv = calloc(1, sizeof(unsigned) * 2 + 3); // each byte is 2 characters in hex, and 2 characters for the 0x and 1 character for the trailing NUL sprintf(conv, "0x%X", (unsigned) input); return conv; 

O, para elaborar la respuesta de @ user1113426:

 char *decToHex(unsigned input) { char *output = malloc(sizeof(unsigned) * 2 + 3); strcpy(output, "0x00000000"); static char HEX[] = "0123456789ABCDEF"; // represents the end of the string. int index = 9; while (input > 0 ) { output[index--] = HEX[(input & 0xF)]; input >>= 4; } return output; } 

No tengo fluidez en C, pero puede usar este pseudo código:

 char * decToHex(int n){ char *CHARS = "0123456789ABCDEF"; //Initialization of 'converted' object while(n > 0) { //Prepend (CHARS[n & 0xF]) char to converted; n >>= 4; } //return 'converted' object }