.jpg)
arcanjo_mg
(usa Debian)
Enviado em 08/02/2007 - 10:41h
Galera, tive a necessidade de uma função que converte-se uma string que representa Hexa para ascii, como não encontrei nenhuma dessa maneira eu implementei-a, está funcionando como eu queria, pensei em postar aqui para que talvez alguem que tenha uma sugestão ajude a melhorá-la pois esta pode ser util para nós futuramente:
unsigned char* ucConverteHexaParaAscii(unsigned char* entrada)
{
unsigned char *copia, *resultado;
int tam = 0, i = 0, j = 0;
char c;
tam = strlen((const char*) entrada);
if( tam%2 != 0 )
{
copia = (unsigned char*) malloc(sizeof(char)*(tam+2));
copia[0] = '0';
for(i = 0; i < tam; i++){
copia[i+1] = tolower(entrada[i]);
}
copia[tam+1] = '{TEXTO}';
}
else{
copia = (unsigned char*) malloc(sizeof(char)*(tam+1));
for(i = 0; i < tam; i++){
copia[i] = tolower(entrada[i]);
}
copia[tam] = '{TEXTO}';
}
tam = strlen((const char*) copia);
//printf("\nString: %s\nTamanho: %d\n", entrada, tam);
resultado = (unsigned char*) malloc(sizeof(char)*(tam+1));
for(i = 0; i < tam; i++)
{
switch(copia[i])
{
case '0':
c = 0;
break;
case '1':
c = 1;
break;
case '2':
c = 2;
break;
case '3':
c = 3;
break;
case '4':
c = 4;
break;
case '5':
c = 5;
break;
case '6':
c = 6;
break;
case '7':
c = 7;
break;
case '8':
c = 8;
break;
case '9':
c = 9;
break;
case 'a':
c = 10;
break;
case 'b':
c = 11;
break;
case 'c':
c = 12;
break;
case 'd':
c = 13;
break;
case 'e':
c = 14;
break;
case 'f':
c = 15;
break;
default:
return (NULL); // caso nao seja um hexa o mesmo deve ser tratado.
break;
}
if(i%2 == 0){
resultado[j] = c;
}
else{
resultado[j] = resultado[j]*16 + c;
j++;
}
}
resultado[j] = '{TEXTO}';
//tam = strlen(resultado);
//printf("\nString: %s\nTamanho: %d\n", resultado, tam);
free(copia);
return (resultado);
}