ASCII > BCD - CCS

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

ASCII > BCD - CCS

Mensagempor Flaviofrc » 21 Nov 2008 19:34

Olá pessoal,

Estou com uma duvida que para a maioria de vocês deve ser muito simples, é o seguinte:

Estou recebendo pela seria do PC uma string e quero converte-la para BCD, por exemplo:

Recebo a string "45" pela seria que corresponde ao numero quarenta e cinco, pois bem, meu sistem entende que é o numero 4 e o 5 separadamente.
Quero juntar esses dois algarismos para formar o numero 45 para por utiliza-lo no meu sistema....

espero ter sido claro, qualquer ajuda eu agradeço.

Obrigado...
Flavio
Flaviofrc
Byte
 
Mensagens: 111
Registrado em: 16 Out 2006 17:32
Localização: São Paulo

Mensagempor msamsoniuk » 22 Nov 2008 00:11

eh relativamente simples, observe a funcao ascii2bcd:

Código: Selecionar todos
#include <stdio.h>

int ascii2bcd(char *ascii)
{
  int bcd,i;

  for(bcd=i=0;ascii[i];i++)
    bcd = ascii[i]-'0' | bcd<<4;

  return bcd;
}

int main()
{
  char *ascii = "12345678";
  int   bcd   = ascii2bcd(ascii);

  return printf("ascii %s -> bcd %x\n",ascii,bcd);
}


basicamente, vc esta varrendo a string com o numero em ascii. a cada numero vc subtrai o valor do offset ascii '0' e isso jah resulta diretamente no digito que vc quer. o resto do truque consiste em empacotar o bcd, isso eh feito com o shift do valor anteior para 4 bits... assim, independente do tamanho da string, o numero correto de shifts sempre eh feito.

uma melhoria boa seria trocar a condicao de fim de string no for para uma condicao de teste de caracter numerico, assim, se nao for um digito, ele encerra o scan e cai fora. e claro, o meu int no teste eh 32 bits... no seu caso provavelmente vc precisa dimensionar a string conforme o tamanho da variavel de saida.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x