2017-05-19 5 views
0

Je dois envoyer quelques commandes à mon microcontrôleur. Iam utilisant la bibliothèque RXTX. Je peux me connecter à mon microcontrôleur mais j'ai des problèmes pour convertir mes commandes en octets à droite.comment envoyer la valeur hexadécimale dans java au port série RS232

Exemple: Je souhaite envoyer une valeur hexadécimale 0x80.

si je convertir en octets

byte a = (byte) 128; 

128 entier (0x80) i get -128

la plage d'octets java est -128 - 127

mais je dois envoyer 128 comme une commande. Comment puis-je le convertir?

J'ai aussi d'autres commandes à envoyer.

80 
20 F2 40 F8 3F 
FA 21 40 

l'un d'entre eux est de 40 bits. J'écris dans le flux de sortie, qui peut accepter byte[] ou int

... 
    static OutputStream out; 
out.write(byte[]); 
out.write(int); 
.. 

Mais int est hors de portée avec 40bit. Comment puis-je analyser un entier 40bit à un octet?

This Question helped me

Répondre

1

0x80 est 0x80 toujours indépendamment de ce que le système de Java de type signé octets il montre que.

Il suffit de l'envoyer.

+0

hm okay. Mon microcontrôleur ne répond pas à mes commandes, je pensais que c'est peut-être le problème: S – Khan

0

Vous pouvez utiliser

Byte.parseByte("a", 16); 

mais cela ne fonctionnera que pour des valeurs jusqu'à 127 valeurs plus élevées alors que devront jeter à l'octet, en raison de problèmes signés/non signés, donc je recommande de le transférer à un int, puis le jeter à l'octet

(byte) (Integer.parseInt("ef",16) & 0xff); 
+0

octet c = (octet) (Integer.parseInt ("128", 16) & 0xff); donnez-moi 40 comme sortie – Khan

+0

Vous devez passer la valeur hexadécimale. 80 –

1

Je l'ai utilisé RXTX liberary longtemps en arrière, je ne pense pas qu'il importe. envoyez simplement string.getBytes()

+0

Je ne veux pas envoyer la représentation en octet de la chaîne – Khan