我正在开发BLE in Android
。
我尝试将字符串值发送到BLE device
在发送给BLE设备之前,string
似乎需要转换为byte
。
我发现了一些如下代码,代码似乎可以将字符串值转换为byte。
private byte[] parseHex(String hexString) {
hexString = hexString.replaceAll("\\s", "").toUpperCase();
String filtered = new String();
for(int i = 0; i != hexString.length(); ++i) {
if (hexVal(hexString.charAt(i)) != -1)
filtered += hexString.charAt(i);
}
if (filtered.length() % 2 != 0) {
char last = filtered.charAt(filtered.length() - 1);
filtered = filtered.substring(0, filtered.length() - 1) + '0' + last;
}
return hexStringToByteArray(filtered);
}
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
private int hexVal(char ch) {
return Character.digit(ch, 16);
}
我在将字符串发送到BLE设备之前调用上面的函数,如下面的代码。
byte[] value = parseHex(text);
mCharacteristic.setValue(value);
mBluetoothGatt.writeCharacteristic(mCharacteristic);
BLE设备将显示我发送给它的值。但价值很奇怪,我没有理解它的意思。
我发送的值和BLE设备显示的值如下所示。
Send BLE Show
1 1
2 2
9 9
10 16
11 17
20 32
30 48
40 64
70 112
90 144
99 153
100 16
我不明白BLE设备的价值意味着什么...... 有人帮助我吗?
答案 0 :(得分:2)
您正在发送十六进制值,这是一个基本16系统,但您的BLE显示值是十进制的。
因此,以十六进制发送10
为1 * 16 + 0 * 1 = 16十进制。同样,99
是9 * 16 + 9 * 1 =十进制的153