java - 如何在 java 中解析 BluetoothGattCharacteristic 值
问题描述
我目前在试图弄清楚如何将数据从我的 ESP32 微控制器传输到 Android 手机时有点迷失了。我已经设法发送和读取特征值,但不知道如何解析它。现在,我正在发送简单的整数值 = 15
。
我发现数据是使用字节数组发送的,因此我将其转换为十六进制字符串,结果没有意义31-35-2E-30-30
。检查了nRF 连接应用程序,它也显示相同的十六进制字符串结果,但此外它已将值解析为15.00
.
这是Arduino代码:
...
char txString[8];
int someNumber = 15;
dtostrf(someNumber, 1, 2, txString);
_pCharacteristicNotify -> setValue(txString);
_pCharacteristicNotify -> notify();
...
安卓工作室
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
_handler.handleMessage(Message.obtain(null, ..., characteristic));
}
private Handler _handler = new Handler() {
public void handleMessage(Message msg) {
// ------- The problem is here ----------------
BluetoothGattCharacteristic characteristic;
characteristic = (BluetoothGattCharacteristic) msg.obj;
String value = Utils.parseBLECharacteristicValue(characteristic);
// the value is "31-35-2E-30-30"
// HOW TO GET THE NUMBER 15 ??
}
};
我正在使用的解析方法来自这里的示例 1
有人可以解释一下如何解析给定的值吗?
如果提供的值是字符串"abcd123"
而不是整数,逻辑将如何变化?
解决方案
31-35-2E-30-30
是字符串的 ASCII 表示15.00
。
根据dtostrf() 文档:
转换以“[-]d.ddd”格式完成。
它解释了字符串 15.00 有两个十进制值,因为调用的第三个参数是2
.
尝试使用 Arduino 的String 构造函数进行整数到字符串的转换。之后,您可以使用 Android 中的 Integer 类将字符串转换回此答案中所述的整数。
推荐阅读
- android - 应用程序突然重启
- python - 散景散点图未显示
- java - Spring boot - Logback - 在所有应用程序日志中记录公共值
- vb.net - Case 中的可编辑值(基于 Vb 的 Ilogic)
- mongodb - 如何将 sum 与 Mongodb 聚合一起使用
- python - 我如何让 python 在文件中查找范围?
- android-studio - 如何为 Calenderview 设置自定义字体?
- instance - 如何使用 mpd 在 icecast 中创建具有不同播放列表的多个挂载点?
- python - 对于一列中的唯一值,获取另一列中唯一值的总数
- javascript - 如何使用 Javascript 或 Jquery 检测 Angular 6 应用程序中的路由变化?