android — Как подписанный байт, отправленный из Java-приложения, поступит на arduino, ожидая неподписанный байт?

Мое простое Java-приложение отправляет два байта в Arduino через Bluetooth. Один байт 0x0A и второй байт будет 0xA0, или 0xA1, или 0xB0, или 0xB1 …

Вот как два байта отправляются из Java

public static byte RELAY_ACCESSORIES_OFF    = (byte)0xB0;
public static byte RELAY_ACCESSORIES_ON     = (byte)0xB1;
...
connection.Send(new byte[] {0x0A, RELAY_ACCESSORIES_ON});
else
connection.Send(new byte[] {0x0A, RELAY_ACCESSORIES_OFF});

А arduino просто читает входящие данные как неподписанный байт.
Так как же работает этот подписанный и неподписанный байт между Java и Arduino?

0

Решение

Целочисленные значения со знаком и со знаком (одинакового размера) представлены одинаковыми битовыми комбинациями, единственная разница заключается в их интерпретации. Нет такой вещи как байт со знаком или без знака, когда вы уменьшаете его до чистого двоичного представления.

Подписанный байт из Java может быть просто отлично передан получателю, который рассматривает его как неподписанный. Проблема обычно возникает только потому, что программист не знает о совершенно различном поведении, достигаемом в зависимости от знака / без знака, когда байт преобразуется в больший тип (что обычно в Java, что происходит неявно в практически любой Операция, которую вы можете выполнить с байтом, поскольку java-операторы, такие как +, -, *, ==, определены для работы с 32-битным знаковым расширенным значением байта).

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector