2017-02-14 2 views
0

Я получаю объект JSON, у которого в нем есть массив байтов в строковом формате из-за ограничений моей системы. Это только для тестирования чего-то.Преобразование формата байта в байтовый массив android

Я получаю строку под вопросом «[1, 2, 3, 4]», например, в андроиде и хочу ее преобразовать, поэтому я заканчиваю байт [] data = [1, 2, 3, 4].

Использование getBytes, очевидно, не возвращает то, что я ищу, и я не знаю, что здесь можно сделать. Помощь будет принята с благодарностью!

Редактировать: Я просто разбирал строку, чтобы получить каждое целое число в массиве int. Есть ли способ легко вставить это в байтовый массив?

Благодаря

+0

** Я получаю объект JSON, который имеет массив байтов в нем **, пожалуйста, укажите структуру вашего формата JSON в коде, и с тех мы говорим о android здесь, надеюсь, что вы знакомы с пакетом org.json в android, который помогает в разборе Json? Более подробное разъяснение даст вам лучший и более чистый ответ – ShayHaned

+0

Здравствуйте, часть JSON на самом деле не то, с чем я столкнулся. Если вы не знаете, как JSON может отправить байтовый массив. Мой вопрос состоит в том, чтобы преобразовать строку, которая имеет формат байтового массива, такой как [1,2,3,4], в фактический массив байтов [1,2,3,4] – lhbortho

+0

, так, другими словами, что вы имеете в виду у вас есть что-то вроде: {"strNotBytes": ["1", "2", "3", "4"]}, и вы ожидаете преобразовать это в массив byte [] или любой выходной поток Byte, если я не неправильно? – ShayHaned

ответ

2

Попробуйте это:

private static byte[] doConvert(String inStr) { 
    String opStr = inStr.substring(1); 
    opStr = opStr.substring(0, opStr.length()-1); 
    int val; 
    String[] arr = opStr.split("[,]"); 
    byte[] retVal = new byte[arr.length]; 
    for (int i=0; i<arr.length; i++) { 
     opStr = arr[i].trim(); 
     try { 
      val = Integer.parseInt(opStr); 
     } catch (Exception e) { 
      System.out.println("bad input at item #"+i+": "+opStr); 
      return null; 
     } 
     if (val > 255) { 
      System.out.println("bad input value at item #"+i+": "+val+" > 255"); 
      return null;     
     } 
     retVal[i] = (byte) val; 
    } 
    return retVal; 
} 
+0

Здравствуйте, это определенно приблизило меня к тому, что мне нужно. Я уже делал что-то похожее, но преобразовывал строку в целое, используя Integer.valueOf() вместо parseInt. Возможно, это вызывало проблемы. Проблема, которую я получаю сейчас, это если я получаю строку [2,182,28,82,251,154,70,149], когда я преобразовываю ее в байты, которые я получаю [2, -74, 28,82, -5, -102, 70, -107]. Я предполагаю, что это связано с подписанными байтами без знака. Есть ли способ трансформировать это? Большое спасибо за помощь до сих пор! – lhbortho

+0

Ничего, на самом деле, так как мне нужны только биты, чтобы иметь правильное значение, чтобы преобразовать их позже. Меня не волнует, если он использует их как подписанные или неподписанные, поэтому спасибо за вашу помощь! – lhbortho

Смежные вопросы