我的简单java应用程序通过蓝牙向arduino发送两个字节。一个字节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 :(得分:2)
带符号和有符号整数值(相同大小)由相同的位模式表示,唯一的区别在于它们的解释。当您将其缩减为纯二进制表示时,不存在有符号或无符号字节。
来自java的带符号字节可以很好地传输到接收器,将其视为无符号。问题通常只会出现,因为程序员不知道在将一个字节转换为更大的类型时,取决于signed / unsigned所取得的非常不同的行为(在java中常见的是在几乎任何操作中隐式发生你可以在一个字节上执行,因为像+, - ,*,==这样的java运算符被定义为在一个字节的32位符号扩展值上运行alaways。