我目前在尝试弄清楚如何将数据从我的ESP32微控制器传输到android手机时迷失了。我已经设法发送和读取特征值,但是不知道如何解析它。.现在,我正在发送简单的整数值= 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 Studio
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表示形式。
根据dtostrf() documentation:
转换以“ [-] d.ddd”格式进行。
解释字符串15.00带有两个十进制值,这是因为调用的第三个参数是2
。
尝试使用Arduino的String constructor进行整数到字符串的转换。之后,您可以使用Android中的Integer类将字符串转换回此answer中所述的整数。