0

我的简单 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 之间工作的呢?

4

1 回答 1

2

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

来自 java 的有符号字节可以很好地传输到将其视为无符号的接收器。问题通常会出现,因为程序员没有意识到当一个字节转换为更大的类型时,依赖于有符号/无符号实现的非常不同的行为(这在 java 中很常见,几乎在您可以对字节执行的任何操作中隐式发生,因为像 +、-、*、== 这样的 java 运算符被定义为对字节的 32 位符号扩展值进行操作)。

于 2013-11-03T19:02:53.120 回答