Página 1 de 1

[C#] Como converter inteiro < 100 em BCD e depois ASCII ?

MensagemEnviado: 28 Dez 2019 22:18
por andre_luis
Ola pessoal,


Tenho que converter um numero ( ex.: 42 em decimal ) em ASCII e dividir em 2 campos, como abaixo:

Código: Selecionar todos
data[1] =  50   // 2 ==> Valor da unidade =  0x30+0x02  = 0x32 = 48+2
data[2] =  52   // 4 ==> Valor da dezena  =  0x30+0x04  = 0x34 = 48+4


Tentei diversos artificios, mas nada funcionando até agora.
Alguem teria uma dica?

Re: [C#] Como converter inteiro < 100 em BCD e depois ASCII

MensagemEnviado: 29 Dez 2019 08:19
por tcpipchip
Divide por 10 e pega quociente e resto, some 48 neles.
/ %

Re: [C#] Como converter inteiro < 100 em BCD e depois ASCII

MensagemEnviado: 29 Dez 2019 09:01
por eletroinf
Uma das primeiras implementações que eu fiz disso, como exemplo:

Código: Selecionar todos
//Função para conversão de um número inteiro em algarismos BCD para serem mostrados no display.
void int_asc(unsigned int n, unsigned char *str)
{
   str += 3;
   *str = n % 10;          // separa os digitos
   str--;
   *str = (n/10) % 10;    // do numero N
   str--;
   *str = (n/100) % 10;
   str--;
   *str = (n/1000) % 10;    // algarismo[4] são as unidades.
}

Re: [C#] Como converter inteiro < 100 em BCD e depois ASCII

MensagemEnviado: 29 Dez 2019 11:59
por Red Neck Guy
Se eu entendi:

csharp code
String int_to_BCDstr(int valor){

if(valor<100){
byte unidade = valor%10;
byte dezena =((valor-unidade)/10);

String tmp = dezena.toString() + unidade.toString();

return tmp;
}

return null;
}



Olha, não peguei os livros para rever a conversão, mas é algo por aí.
Dá uma olhada apenas no trecho que calcula unidade e dezena, o resto é isso mesmo.
A idéia é depois no local em que tu chama a função validar o resultato:

if(int_to_BCDstr(XPTO)!=null){
//trata aqui
}

Re: [C#] Como converter inteiro < 100 em BCD e depois ASCII

MensagemEnviado: 29 Dez 2019 13:29
por Red Neck Guy
Lembrei que faltaram os castings:
csharp code
private static String int_to_BCDstr(int valor)
{

if(valor<100){
byte unidade = (byte)(valor%10);
byte dezena = (byte)(((valor-unidade)/10));
String tmp = dezena.ToString() + unidade.ToString();
return tmp;
}
return null;
}

Re: [C#] Como converter inteiro < 100 em BCD e depois ASCII

MensagemEnviado: 29 Dez 2019 14:02
por andre_luis
Pessoal,

Ontem mesmo acabei encontrando a resposta num mix de solucoes, segue como ficou (no caso, incluí o digito milhar):

csharp code
String strAdd = startAddress.ToString("000");   // Cria uma string a partir do inteiro 'startAddress'...
strAdd.ToString().PadLeft(3, '0'); // ... com tamanho de 3 caracteres

char[] characters = strAdd.ToCharArray(); // Cria um array indexável com cada um dos 3 caracteres da string

data[1] = (byte) characters[0]; // unidade
data[2] = (byte) characters[1]; // dezena
data[3] = (byte) characters[2]; // centena


Obrigado a todos