Transformar string em hexa.

1. Transformar string em hexa.

Sonics
Sonics

(usa Slackware)

Enviado em 10/12/2005 - 17:12h

O tal programinha escaneia uma string e imprime em hexadecimal por meio de um looping com a incrementação de um ponteiro, até aí tudo bem, mas quando fui converter de hexa para string me deparei com o seguinte problema:
Código:
tr_car()
{
char *p2;
long int hex[80];
p2 = &hex[0];
scanf("%x", &hex);
while(*p2) printf("%c", *p2++);
printf("\nDone!\n");
}

Quando vou converter por exemplo 61, imprime a letra "a", mas se eu colocar mais que 3 hexas dá erro no programa por exemplo "61616161", dá bug, e também não posso dar espaço entre eles, e aí alguém sabe o que fazer?


  


2. Re: Transformar string em hexa.

Felipe Abella
FelipeAbella

(usa Debian)

Enviado em 10/12/2005 - 19:02h

Voce quer ler um numero e transformar em hexa?
ler hexa e imprimir hexa?

eu nao entendi oque voce quer fazer, explique um pouco melhor


3. Re: Transformar string em hexa.

Sonics
Sonics

(usa Slackware)

Enviado em 10/12/2005 - 19:31h

Quero ler hexa e tranformar em string.


4. Re: Transformar string em hexa.

Diego da Silva de Medeiros
diegotosco

(usa Slackware)

Enviado em 10/12/2005 - 23:23h

Olá,

Como fazer eu não sei, teria que pensar mais, mas o tempo tá curto, mas talvez eu saiba, pelo menos, o porquê dos erros.

Acredito que o maior erro vem do fato de você ter um ponteiro char igualado à um vetor de inteiros, pois ao incrementar "p2", você poderá estar no meio de um elemento do vetor "hex", não necessáriamente no próximo elemento. Você pode declarar um ponteiro "int".

Outra coisa, quando você digita um número maior que 3 hexas, deve dar erro na conversão, pois como a tabela ASCII tem 256 caracteres, um número maior que esse não poderá ser convertido, pois não existe o valor a ser convertido. Isso porque qualquer número que você digitar será armazenado em um único elemento de "hex", não em elementos separados. Então ao digitar uma sequência de hexas como o "61616161", toda a string será armazenada em um único elemento, que não poderá então ser convertido. Não sei se ficou bem claro.

Sobre os espaços, scanf() não os aceita, sendo necessário o uso de outra função (recomendo fgets(), pesquise no man).

Espero que tenha ajudado amigo, tenta dar uma pesquisada nesses assuntos, caso eu tenha falado alguma besteira, por favor me corrija, para não gerar confusão Quando chegar ao resultado, poste aqui o que estava errado realmente.


5. Re: Transformar string em hexa.

Sonics
Sonics

(usa Slackware)

Enviado em 10/12/2005 - 23:29h

Obrigado pela explicação, mas ainda não sei como fazer...


6. Respota

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 04/03/2006 - 14:24h

Está ai o codigo:

#include <stdio.h>
#include <stdlib.h>

int hexStr(void)
{
char hex[100]; //irá ler do usuario
int i;
int j = 0;
int u = 0;
printf("Digite uma string em HEXA: ");
for(i = 0; hex[i] != '\xd'; i++)
scanf("%x", &hex[i]);
for(i = 0; i < strlen(hex); i++)
printf("%c", hex[i]);
return 0;
}

int main(void)
{
hexStr();
puts("");
}

Voce tem que soltar um espaço a cada numero hexa que digitar, e para parar, digite \xd

Caso não entenda, só me avisar....
enzo@veloxmail.com.br


7. Nota

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 04/03/2006 - 14:28h

Ao amigo diegotosco, e aos outros que lerem este topico:

diegotosco disse que scanf não aceita espaços, isso não é verdade. Aceitar aceita, só que precisa de parametros certos. Para poder ler espaços em string usando scanf faça:
...
char str[100];
...
scanf("%[^\n]", str);
...

%[^\n] informa à função para ler todos os caracteres que encontrar, incluindos espaços, até encontrar um retorno de carro (\n), ou seja, ENTER.

Espero ter ajudado,
Té mais,






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts