Я использую приложение 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 и отправки данных желаемым способом, который я описал в объяснении выше.