Convertir código base 4 en letras

Estoy trabajando en un proyecto de ensamblador que tengo y necesito traducir el código binario de la máquina que tengo a un código “extraño” de 4 bases, por ejemplo, si obtengo un código binario como este “PST10-01-00” debería traducir a “aacba”

00 = a

01 = b

10 = c

11 = d

He logrado traducir el código a 4 código base pero no sé cómo continuar desde allí o si esta es la manera correcta de hacerlo, …

agregando mi código abajo

void intToBase4 (unsigned int *num) { int d[7]; int j,i=0; double x=0; while((*num)>0) { d[i]=(*num)%4; i++; (*num)=(*num)/4; } for(x=0,j=i-1; j>=0; j--) { x += d[j]*pow(10,j); } (*num)=(unsigned int)x; } 

He incluido un pequeño convertidor de 32 bits a num a letra para que entiendas lo básico. Funciona un solo “número de 32 bits” a la vez. Podría usar esto como base para una solución basada en matrices, como lo ha hecho a medias en su ejemplo, o cambiar el tipo para que sea más grande, o lo que sea. Debería mostrarte aproximadamente lo que debes hacer:

 void intToBase4 (uint32_t num, char *outString) { // There are 16 digits per num in this example for(int i=0; i<16; i++) { // Grab the lowest 2 bits and convert to a letter. *outString++ = (num & 0x03) + 'a'; // Shift next 2 bits low num >>= 2; } // NUL terminate string. *outString = '\0'; } 

Un poco más universal: Uso: valor – valor a decodificar, buff – buff donde se almacenará la cadena de resultados, numofwrds – número de campos a decodificar, … tamaños de campos en bits

ejemplo “xxxxyyvvzz”: – 4 bits, dos bits, dos bits, dos bits

 decode(v, buff, 4, 4, 2, 2, 2); 

 char dictionary[] = "abcdefghijklmnopqrstuwxyz"; char *decode(unsigned int value, char *buff, int numofwrds, ...) { va_list vl; int *fieldsizes = malloc(sizeof(int) * numofwrds); int bitsize = 0; char *result = NULL; if (fieldsizes != NULL) { va_start(vl, numofwrds); for (int i = 0; i < numofwrds; i++) { fieldsizes[i] = va_arg(vl, int); bitsize += fieldsizes[i]; } va_end(vl); for (int i = 0; i < numofwrds; i++) { unsigned int mask, offset; mask = (1 << fieldsizes[i]) - 1; offset = bitsize - fieldsizes[i]; mask <<= offset; buff[i] = dictionary[(value & mask) >> offset]; bitsize -= fieldsizes[i]; } free(fieldsizes); result = buff; } buff[numofwrds] = '\0'; return result; }