Logo Hardware.com.br
Claudio Hideki
Claudio Hide... Cyber Highlander Registrado
41.6K Mensagens 297 Curtidas

C# Visual Studio - problemas ao enviar strings ASCII

#1 Por Claudio Hide... 12/03/2018 - 19:10
Boas!
Estou tentando enviar alguns comandos para um hardware específico pela porta RS232. Os comandos originais são parecidos com este:

Hexa:
3A 53 31 53 4F 4C 32 DE
ASCII:
:S1S0L2.


Quando tento enviar um comando em texto usando um código C# através de uma textBox, ele envia o comando, mas na verdade é recebido pelo hardware da seguinte forma:

Hexa:
3A 53 31 53 4F 4C 32 2E
ASCII:
:S1S0L2.


E o hardware não funciona. Ou seja, muda o último bloco de DE para 2E Alguém sabe porquê isso acontece?
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
12/03/2018 - 22:15
Ao que parece a questão tem a ver com diferenças entre as arquiteturas.

Se convertermos para decimal obtemos a seguinte sequência:
3A 53 31 53 4F 4C 32 DE

58 83 49 83 79 76 50 222
Percebe-se que o único valor acima de 127 (ou 2^8) é o último da lista.

A se confirmar esta a situação, o primeiro termo do último bloco "D" (208) já irá provocar a sobrecarga do buffer pois ele admite apenas 127 como máximo valor.
O estouro do buffer irá desprezar os dígitos inválidos, resultando em:
208 - 127 = 81

Daí, ao validar novamente o complemento obtemos:
127 - 81 = 46

Ora, o que este valor representará em Hexadecimal? Vejamos:
46/16 = (2) com resto igual a (14)

Hexa => 2x + 14 = "2E"

.
Daí o hardware desprezará aquele último "E" na fila e insere a sequência "2E" como valor válido, de fato.
...
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#3 Por jqueiroz
13/03/2018 - 11:20
Traduzindo big_green.png , você tem um valor do tipo "byte" (unsigned char), está armazenando num valor "char", causando a perda da informação.

Na hora de imprimir, vc também precisa levar isso em conta. Qualquer formato usado deve incluir o modificador "u" (p.ex. "%ud", "%ux").


Enviado do meu smartphone
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal