Conversão de fração decimal em fração hexadecimal

25/02/2020

9

Estou criando uma solução alternativa de comunicação com um equipamento de automação e me deparei com uma forma de representar os números com virgula em hexadecimal que não consigo entender o padrão.
EX:
0,0 = 00 00 00 00
0,1 = 3D CC CC CD
0,2 = 3E 4C CC CD
0,3 = 3E 99 99 9A
0,4 = 3E CC CC CD
0,5 = 3F 00 00 00
0,6 = 3F 19 99 9A
0,7 = 3F 33 33 33
0,8 = 3F 4C CC CD
0,9 = 3F 66 66 66
1,0 = 3F 80 00 00
1,1 = 3F 8C CC CD
1,2 = 3F 99 99 9A
1,3 = 3F A6 66 66
1,4 = 3F B3 33 33
1,5 = 3F C0 00 00
1,6 = 3F CC CC CD
1,7 = 3F D9 99 9A
1,8 = 3F E6 66 66
1,9 = 3F F3 33 33
2,0 = 40 00 00 00
2,1 = 40 06 66 66
2,2 = 40 0C CC CD
2,3 = 40 13 33 33
2,4 = 40 19 99 9A
2,5 = 40 20 00 00
2,6 = 40 26 66 66
2,7 = 40 2C CC CD
2,8 = 40 33 33 33
2,9 = 40 39 99 9A
3,0 = 40 40 00 00
3,1 = 40 46 66 66
3,2 = 40 4C CC CD
3,3 = 40 53 33 33
3,4 = 40 59 99 9A
3,5 = 40 60 00 00

Esse é o padrão como o software do fabricante se comunica com os painéis de automação. Alguém conhece esse tipo de conversão e sabe me dizer qual formula posso usar para converter tanto de hexa para decimal como o inverso? Vou precisar desses números de 0,0 a 100,0 e descobrir todos manualmente vai levar tempo.
Responder

Post mais votado

25/02/2020

É porque os números não foram convertidos de decimal para hexadecimal, mas de binário para hexadecimal, você provavelmente está usando um arduino ou algo de baixo nível ai, computadores só conseguem interpretar números decimais em linguagens de alto nível, eu não entendo muito de binários, mas vou te mostrar como converter um valor binário para hexadecimal para você entender:

Primeiro os algarismos de cada base:
Binária:
0 = 0
1 = 1
Decimal:
0 = 0
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
Hexadecimal:
0 = 0
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15

Agora um pouco sobre como ler um número binário(usarei o número 1010 como exemplo):

Multiplique cada número pela base(no caso da base binária, 2) elevada ao índice(começando com 0), lendo da direita para a esquerda e some os resultados, assim:

2 elevado a 3 2 elevado a 2 2 elevado a 1 2 elevado a 0
multiplicado multiplicado multiplicado multiplicado
por por por por
1 0 1 0
= = = =
8 + 0 + 2 + 0 = 10 <------resultado na base decimal


No caso de números hexadecimais, só são necessários 4 dígitos binários para representar cada um, indo de 0(0000) até 15(1111), então você tem que pegar os números decimais, convertê-los para binários, separar os binários em grupinhos de 4, e substituir cada grupinho pelo hexadecimal correspondente, como não conheço binários a fundo usei um conversor online para converter o valor de 0.1 para binário e obtive o seguinte resultado:

00111101110011001100110011001101 que separado em grupos de 4 fica assim -> 0011 1101 1100 1100 1100 1100 1100 1101 agora a conversão -> 0011(3) 1101(D) 1100(C) 1100(C) 1100(C) 1100(C) 1100(C) 1101(D) -> 3DCCCCCD
Responder

Mais Posts

25/02/2020

Diogo Paganini

Opa maravilha. Tentei fazer conversões conforme você me explicou mas não estou conseguindo ainda. Você converteu 0.1 para binário como número ou como texto? Nenhuma das calculadoras de numero decimal para binário que encontrei está aceitando um valor fracionário. Poderia me enviar o link do conversor que você usou?
Responder

25/02/2020

Sadasd

Opa maravilha. Tentei fazer conversões conforme você me explicou mas não estou conseguindo ainda. Você converteu 0.1 para binário como número ou como texto? Nenhuma das calculadoras de numero decimal para binário que encontrei está aceitando um valor fracionário. Poderia me enviar o link do conversor que você usou?


Converti como número, mas descobri que é em um tipo especial de notação em binário, ieee 754, é só pesquisar tutoriais de conversão para ieee 754 que você deve achar algo, eis o conversor:

https://www.h-schmidt.net/FloatConverter/IEEE754.html

digita o número no "you entered" e aperta enter, o resultado vai aparecer em "binary representation".
Responder

25/02/2020

Diogo Paganini

Aí sim piá. Muito obrigado.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar