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

标签 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 之间是如何计算的呢?

最佳答案

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

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

关于java - 从 java 应用程序发送的带符号字节如何到达 arduino 期望无符号字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19756382/

相关文章:

c++ - 为什么要使用此代码来获取有多少个枚举成员?

java - 日期格式异常

java - 将 DecimalFormat(#.#) 与本地化一起使用

android - 搜索建议背景

android - 如何使用 OpenCV 在 Android 相机上禁用/修改 AutoFocus 和 AutoWhiteBalance

c++ - 访问网格的顶点

java - 如何在 Java 中处理 finally block 中的抛出异常

java - 在单独的进程中打开 url

java - 在listview android中多次点击

C++ 重载运算符<<