Java 将有符号字节数组转换为Int数组

Java 将有符号字节数组转换为Int数组,java,arrays,bytearray,Java,Arrays,Bytearray,我有一个整数数组 int res[] = {176, 192, 312, 1028, 1064, 1016}; 我得到相应int数组的有符号字节数组,如下所示 int signed_byte_array[] = {-80, 0, -64, 0, 56, 1, 4, 4, 40, 4, -8, 3}; int数组中的每个索引由字节数组中的两个索引表示,这意味着int数组中的每个值都由2个字节表示 我没有访问int数组的权限,我想将这个有符号字节数组精确地转换为int数组 我该怎么做 谢谢 这显

我有一个整数数组

int res[] = {176, 192, 312, 1028, 1064, 1016};
我得到相应int数组的有符号字节数组,如下所示

int signed_byte_array[] = {-80, 0, -64, 0, 56, 1, 4, 4, 40, 4, -8, 3};

int数组中的每个索引由字节数组中的两个索引表示,这意味着int数组中的每个值都由2个字节表示

我没有访问int数组的权限,我想将这个有符号字节数组精确地转换为int数组

我该怎么做

谢谢


这显然是一个短[]到字节[]的转换。正如您有一个int[]一样,我想说的是,不存在实用程序转换函数。

看起来字节代表无符号16位整数,最高有效字节排在第二位,第8位以上的位被截断。您可以按如下方式进行转换:

int[] signed_byte_array = {-80, 0, -64, 0, 56, 1, 4, 4, 40, 4, -8, 3};
int[] int_array = new int[signed_byte_array.length / 2];
for (int i = 0 ; i != int_array.length ; i++) {
    int_array[i] = (signed_byte_array[2*i+1] & 0xFF) << 8
                 | (signed_byte_array[2*i+0] & 0xFF);
}

什么?你能解释得更彻底吗?可能的副本i有符号字节数组,我想转换成int数组,只考虑上面的字节数组作为输入并将其转换成int数组,这样它就给了我上面的整数数组“int数组中的每个值表示为2字节”。-对于大于2^16的整数值,您希望如何处理?取决于信号值,它可以是任何更大的值Joop Eggen我如何将lo和hi字节作为一个整数值并将其保存为数组索引我在上半部分进行了保存。现在完成。否则很难自动测试。@UmairIqbal使其可执行。有些强制转换太多,因为我将字节更改为使用的int。
b: [-80, 0, -64, 0, 56, 1, 4, 4, 40, 4, -8, 3]
i: [176, 192, 312, 1028, 1064, 1016]
int[] signed_byte_array = {-80, 0, -64, 0, 56, 1, 4, 4, 40, 4, -8, 3};
int[] int_array = new int[signed_byte_array.length / 2];
for (int i = 0 ; i != int_array.length ; i++) {
    int_array[i] = (signed_byte_array[2*i+1] & 0xFF) << 8
                 | (signed_byte_array[2*i+0] & 0xFF);
}
176 192 312 1028 1064 1016