Ho un messaggioJava esadecimale
static int[] message = {
0x01, 0x10, 0x00,
0x01, // port addres 01 - 08
0x00, 0x01, 0x02,
0x06, 0x00,
0xA4, 0x21
};
so che i dati sono di destra, come di li sto scrivendo a porta COM con RXTX, e ho avuto ragione reazione HW
so che 0x01
è il valore 1
e inviato come 01
(che è due bit, quarto byte lungo)
Quando ho bisogno di regolare il messaggio, sta generando valori come questo giusto?
message[index] = 1 & 0xff
vedo l'output di questo frammento, e sembra correttamente
for (int i = 0; i < 255; i++) {
System.out.println(i & 0xff);
}
C'è qualche foglio che mi avresti consiglio di leggere?
sta memorizzando questi numeri in int
ragione, come non possiamo usare byte (-128, +127)
per valori fino a <0x00, 0xFF>
gamma
È possibile utilizzare i byte. Ma devi trasmettere ogni valore a byte: 'byte [] messaggio = {(byte) 0xff};' –
* "So che OxO1 è 1 valore e inviato veramente come 01 (che è due bit)" * No a meno stai facendo qualcosa per farlo accadere. Un Java 'int' è un valore a 32 bit ([riferimento] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)). Solo perché il valore non * richiede * tutti questi bit non significa che non vengono inviati.La dimensione di ciò che stai inviando potrebbe essere limitata dal modo in cui la stai inviando, ma dati gli altri valori che citi, puoi essere sicuro di inviare almeno otto bit. –
Forse dovresti considerare l'utilizzo di ByteBuffer – fge