Java签名字节数组与.Net Byte数组兼容

时间:2014-01-30 13:03:40

标签: java .net bytearray jersey-2.0

我们有一个使用泽西的Java Rest服务。

我以字节数组的形式接收整数数据,其中嵌入了CRC。它作为Plain_text输入,变量的类型为string

我们需要重新检查CRC值。

由于它来自.Net应用程序,其中所有值都在0到255之间(带符号字节数组),而在Java中它介于-127到128之间(带符号字节数组)。

所以我需要建议如何在Java中将无符号字节数组转换为有符号字节数组?

我面临的其他问题是:

  1. 每当有超过127的值时,在java中它将显示垃圾值或63(常数值不确定原因)。

  2. 我觉得很奇怪,这些值小于127,但CRC值在另一边。

  3. 我希望我的问题清楚明确并提出建议。

    由于其非常大的数组和(& 0xFF),不会成功。因为我们有大的数组大小。

1 个答案:

答案 0 :(得分: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

从无符号到有符号字节数组的反向使用:

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