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

Programação C em geral

Moderadores: 51, guest2003

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

Mensagempor andre_luis » 28 Dez 2019 22:18

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?
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

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

Mensagempor tcpipchip » 29 Dez 2019 08:19

Divide por 10 e pega quociente e resto, some 48 neles.
/ %
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

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

Mensagempor eletroinf » 29 Dez 2019 09:01

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.
}
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

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

Mensagempor Red Neck Guy » 29 Dez 2019 11:59

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
}
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

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

Mensagempor Red Neck Guy » 29 Dez 2019 13:29

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;
}
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

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

Mensagempor andre_luis » 29 Dez 2019 14:02

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
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para Visual C++/C/C++/C#

Quem está online

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

x