对于BLE,该值意味着从字符串转换为十六进制?

时间:2014-05-24 06:04:32

标签: android bluetooth-lowenergy

我正在开发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设备的价值意味着什么...... 有人帮助我吗?

1 个答案:

答案 0 :(得分:2)

您正在发送十六进制值,这是一个基本16系统,但您的BLE显示值是十进制的。

因此,以十六进制发送10为1 * 16 + 0 * 1 = 16十进制。同样,99是9 * 16 + 9 * 1 =十进制的153