Проблема преобразования шестнадцатеричных байтов в Android - PullRequest
0 голосов
/ 18 апреля 2019

Я использую приложение Android для связи с устройством Bluetooth LE.Библиотека принимает байт [] в качестве входных данных для отправки на устройство BLE.У меня проблема с преобразованием строки в шестнадцатеричный, а затем в шестнадцатеричный байт.

Данные, которые я хочу отправить, 23,57,12,15, D9 (это байтовый массив иданные представлены в шестнадцатеричном формате, первые три числа являются статическими, а последние два являются только динамическими)

, но 23,57,12,0F, D9 отправляется в фактическом.Здесь преобразование 0F в десятичное число дает только 15, что, как ожидается, не будет отправлено.

Код, который я использую для преобразования данных, выглядит следующим образом:

 public sendToDevice(byte[] b){
 ....
 }

 public void prepareMsg(){

 byte msg[] = {(byte) 0x23, (byte) 0x57, (byte) 0x12, (byte) 0x00, (byte) 
 0x00};
 String dataValue = "D9";
  byte bTemp[] = hex2Byte(checkSum);
  msg[3] =  bTemp[0];
  sendToDevice(msg);
 }

public byte[] hex2Byte(String str)
{
   byte[] bytes = new byte[str.length() / 2];
   for (int i = 0; i < bytes.length; i++)
   {
      bytes[i] = (byte) Integer
            .parseInt(str.substring(2 * i, 2 * i + 2), 16);
   }
   return bytes;
}

есть пример статически определенных данныхтакже,

public static final byte msg[] = {(byte) 0x23, (byte) 0x57, (byte) 0x12, (byte) 0x15, (byte) 0xD9};

, но в моем случае данные генерируются динамически.

, если я использую String.valueOf(Integer.toHexString(b[3]), я могу видеть значение правильно, но, к сожалению, метод возвращает строку, которую я не могусохранить в байтовом массиве.

Отсюда у меня два вопроса:

1. Как преобразовать строку (D9) в шестнадцатеричный код и сохранить в байтовом массиве.

2. Как избежать преобразования 15 в 0F и отправки данных желаемым способом, который я описал в объяснении выше.

...