我的简单 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 位符号扩展值进行操作)。
关于java - 从 java 应用程序发送的带符号字节如何到达 arduino 期望无符号字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19756382/