Mam wiadomośćJava szesnastkowy
static int[] message = {
0x01, 0x10, 0x00,
0x01, // port addres 01 - 08
0x00, 0x01, 0x02,
0x06, 0x00,
0xA4, 0x21
};
Wiem, że dane są w porządku, od Piszę je do portu COM z RxTx i mam właściwą reakcję HW
wiem, że 0x01
to jest wartość 1
i jest wysyłana naprawdę jak 01
(czyli dwa bity o długości ćwierć bajta)
Kiedy muszę dostosować komunikat, czy generowanie takich wartości jest prawidłowe?
message[index] = 1 & 0xff
widzę wyjście z tego fragmentu, i wygląda prawidłowo
for (int i = 0; i < 255; i++) {
System.out.println(i & 0xff);
}
Czy istnieje arkusz chcesz polecić mi czytać?
jest przechowywanie tych numerów w int
prawo, jako że nie można używać byte (-128, +127)
dla wartości do <0x00, 0xFF>
zakresie
Możesz użyć bajtów. Ale musisz odrzucić każdą wartość do bajtu: 'byte [] message = {(byte) 0xff};' –
* "Wiem, że OxO1 ma 1 wartość i jest wysyłane naprawdę jak 01 (co jest dwoma bitami)" * Nie, chyba że robisz coś, żeby to się stało. Java 'int' jest wartością 32-bitową ([odniesienie] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)). Tylko dlatego, że wartość * nie * wymaga wszystkich tych bitów, nie oznacza, że nie są wysyłane.Rozmiar wysyłanych wiadomości może być ograniczony przez sposób wysyłania, ale biorąc pod uwagę inne wartości, które podajesz, możesz mieć pewność, że wysyłasz co najmniej osiem bitów. –
Może powinieneś rozważyć użycie ByteBuffer – fge