C: convertir de décimal en hexadécimal à l’aide d’opérations au niveau du bit

Je dois convertir un nombre décimal en octal et hexadécimal à l’aide d’opérations au niveau du bit. Je sais comment le convertir en binary:

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; } 

Pouvez-vous m’aider à convertir décimal en hexadécimal? Quelle devrait être l’idée de base? Est-il possible d’utiliser un masque pour cela? Je vous remercie.

Vous pouvez “sortingcher” et utiliser 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; 

Ou, pour développer la réponse 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 ssortingng. int index = 9; while (input > 0 ) { output[index--] = HEX[(input & 0xF)]; input >>= 4; } return output; } 

Je ne parle pas couramment C, mais vous pouvez utiliser ce pseudo-code:

 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 }