如何解析 java 中的 BluetoothGattCharacteristic 值
How to parse BluetoothGattCharacteristic value in java
我目前有点迷茫,无法弄清楚如何将数据从我的 ESP32 微控制器传输到 android phone。我已经设法发送和读取特征值,但不知道如何解析它。现在,我发送简单的整数值 = 15
。
我发现数据是使用字节数组发送的,因此我将其转换为十六进制字符串,但结果没有意义31-35-2E-30-30
。检查了 nRF connect 应用程序,它也显示相同的十六进制字符串结果,但此外它已将值解析为 15.00
。
Arduino代码如下:
...
char txString[8];
int someNumber = 15;
dtostrf(someNumber, 1, 2, txString);
_pCharacteristicNotify -> setValue(txString);
_pCharacteristicNotify -> notify();
...
Android工作室
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 ??
}
};
我使用的解析方法来自这里Example 1
有人可以解释一下如何解析给定值吗?
如果提供的值是字符串 "abcd123"
而不是整数,逻辑将如何改变?
31-35-2E-30-30
是字符串 15.00
.
的 ASCII 表示
Conversion is done in the format "[-]d.ddd".
这解释了字符串 15.00 具有两个小数值,因为调用的第三个参数是 2
。
尝试使用String constructor of Arduino for your integer-to-string conversion. Afterwards, you can use the Integer class in Android to convert the string back to an integer as stated in this answer。
我目前有点迷茫,无法弄清楚如何将数据从我的 ESP32 微控制器传输到 android phone。我已经设法发送和读取特征值,但不知道如何解析它。现在,我发送简单的整数值 = 15
。
我发现数据是使用字节数组发送的,因此我将其转换为十六进制字符串,但结果没有意义31-35-2E-30-30
。检查了 nRF connect 应用程序,它也显示相同的十六进制字符串结果,但此外它已将值解析为 15.00
。
Arduino代码如下:
...
char txString[8];
int someNumber = 15;
dtostrf(someNumber, 1, 2, txString);
_pCharacteristicNotify -> setValue(txString);
_pCharacteristicNotify -> notify();
...
Android工作室
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 ??
}
};
我使用的解析方法来自这里Example 1
有人可以解释一下如何解析给定值吗?
如果提供的值是字符串 "abcd123"
而不是整数,逻辑将如何改变?
31-35-2E-30-30
是字符串 15.00
.
Conversion is done in the format "[-]d.ddd".
这解释了字符串 15.00 具有两个小数值,因为调用的第三个参数是 2
。
尝试使用String constructor of Arduino for your integer-to-string conversion. Afterwards, you can use the Integer class in Android to convert the string back to an integer as stated in this answer。