我的简单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之间工作?
最佳答案
用相同的位模式表示(相同大小的)无符号和有符号整数值,唯一的区别在于它们的解释。将其简化为纯二进制表示形式时,不存在带符号或无符号字节之类的内容。
来自Java的带符号字节可以很好地传输到将其视为无符号的接收方。仅由于程序员不了解将字节强制转换为较大类型时在有符号/无符号上实现的行为有很大不同(在Java中,您几乎可以对字节执行的任何操作都隐式发生这种情况,在程序员中,因为定义了Java运算符(例如+,-,*,==)以对字节的32位符号扩展值进行无限制运算)。