从java应用程序发送的带符号字节将如何到达期望无符号字节的arduino?

时间:2013-11-03 18:26:12

标签: java android c++ bluetooth arduino

我的简单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之间解决?

1 个答案:

答案 0 :(得分:2)

带符号和有符号整数值(相同大小)由相同的位模式表示,唯一的区别在于它们的解释。当您将其缩减为纯二进制表示时,不存在有符号或无符号字节。

来自java的带符号字节可以很好地传输到接收器,将其视为无符号。问题通常只会出现,因为程序员不知道在将一个字节转换为更大的类型时,取决于signed / unsigned所取得的非常不同的行为(在java中常见的是在几乎任何操作中隐式发生你可以在一个字节上执行,因为像+, - ,*,==这样的java运算符被定义为在一个字节的32位符号扩展值上运行alaways。