Какое значение означает преобразование из строки в шестнадцатеричный для BLE?

Я развиваю BLE in Android.

И я пытаюсь отправить строковое значение в BLE device

Похоже, string необходимо преобразовать в byte перед отправкой на устройство BLE.

Я нашел код вроде следующего, кажется, код может преобразовать строковое значение в байт.

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 устройстве ... Кто-нибудь мне помогает?


person Wun    schedule 24.05.2014    source источник


Ответы (1)


Вы отправляете шестнадцатеричные значения, которые являются системой с основанием 16, но ваши значения BLE Show являются десятичными.

Следовательно, отправка 10 в шестнадцатеричном формате равна 1 * 16 + 0 * 1 = 16 в десятичном формате. Точно так же 99 равно 9 * 16 + 9 * 1 = 153 в десятичной системе.

person ianhanniballake    schedule 24.05.2014