2014-01-30 4 views
2

У нас есть служба Java Rest с использованием трикотажа.Совместимость с байт-байтами Java с массивом .Net Byte

Я получаю целочисленные данные в виде массива байтов с встроенным в него CRC. Он вводится как Plain_text, а переменная имеет тип string.

Нам нужно перепроверить значения CRC.

Поскольку он исходит из приложения .Net, в котором все значения будут находиться в диапазоне от 0 до 255 (подписанный массив байтов), а в Java он находится между -127 и 128 (подписанный массив байтов).

Итак, мне нужно предложить, как преобразовать массив без знака в байтовый массив в Java?

Другие проблемы, что я облицовочные являются:

  1. Всякий раз, когда есть значение больше, чем 127, то в Java, он будет показывать значение нежелательной или 63 (постоянное значение не знаю, почему).

  2. Мне очень странно, что значения меньше 127, но значения CRC находятся в другой стороне.

Надеюсь, я разъяснил свой вопрос и даю предложение.

Поскольку его очень большой массив (& 0xFF), не сделал бы этого. Поскольку мы имеем большой размер массива.

+0

Как вход выглядит? Вы говорите, что это строка, это строка чисел от 0 до 255? –

+0

@POST @Path ("/ {ID}") @Produces ("текст/обычный; кодировка = UTF-8") \t @Consumes ("текст/обычный") \t общественный резонанс pullservice (@PathParam («ID») String deviceID, String data) {. data - входной параметр в методе. но то, что требуется для интергеров, которые закодированы в массиве байтов. Работает отлично. Но нужно добавить проверку CRC с помощью SHA-256. Следовательно, проблема совместимости между .net и java. –

ответ

0

Для преобразования подписанной массив байт без знака я использовал:

private static void printByteArrayFromSigned(byte[] arr) { 

    if(arr == null || arr.length == 0){ 
     logger.debug("Array vuoto"); 
     return; 
    } 
    StringBuilder sb = new StringBuilder(); 
    for(byte b : arr) { 
     int x = b; 
     if(x<0){ 
      x+=256; 
      sb.append("["+x+"]* "); 
     }else{ 
      sb.append("["+x+"] "); 
     } 
    } 
    logger.debug(sb.toString()); 
} 
//* converted 

ViceVersa из знака в знаковом использовании массива байт:

private static void printByteArrayFromUnsigned(byte[] arr) { 

    if(arr == null || arr.length == 0){ 
     logger.debug("Array vuoto"); 
     return; 
    } 
    StringBuilder sb = new StringBuilder(); 
    for(byte b : arr) { 
     int x = b; 
     if(x>127){ 
      x-=256; 
      sb.append("["+x+"]* "); 
     }else{ 
      sb.append("["+x+"] "); 
     } 
    } 
    logger.debug(sb.toString()); 
} 

//* converted 
Смежные вопросы