0

我有一个整数数组

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 数组中的每个索引由 byte 数组中的两个索引表示,这意味着 int 数组中的每个值都表示为 2 个字节。

我无权访问 int 数组,我想将此有符号字节数组完全转换为 int 数组

我怎样才能做到这一点?

谢谢

4

2 回答 2

1

这些字节似乎代表无符号的 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);
}

int_array[i]当我在循环中添加打印时,我得到了这些值:

176 192 312 1028 1064 1016
于 2013-06-21T10:18:26.087 回答
0
private static int[] toB(int[] res) {
    int[] bytes = new int[res.length * 2];
    for (int i = 0; i < res.length; ++i) {
        int value = res[i];
        int lo = value & 0xFF;
        int hi = (value >> 8) & 0xFF;
        bytes[2 * i] = (int)(byte) lo;
        bytes[2 * i + 1] = (int)(byte) hi;
    }
    return bytes;
}

private static int[] toI(int[] bytes) {
    int[] res = new int[bytes.length / 2];
    for (int i = 0; i < res.length; ++i) {
        int lo = (int) bytes[2 * i] & 0xFF;
        int hi = (int) bytes[2 * i + 1] & 0xFF;
        res[i] = lo | (hi << 8);
    }
    return res;
}

public static void main(String[] args) {
    int[] res = {176, 192, 312, 1028, 1064, 1016};
    int[] signed_byte_array = {-80, 0, -64, 0, 56, 1, 4, 4, 40, 4, -8, 3};
    System.out.println("b: " + Arrays.toString(toB(res)));
    System.out.println("i: " + Arrays.toString(toI(signed_byte_array)));
}

b: [-80, 0, -64, 0, 56, 1, 4, 4, 40, 4, -8, 3]
i: [176, 192, 312, 1028, 1064, 1016]

这显然是一个 short[] 到 byte[] 的转换。正如你有一个 int[] 我会说,不存在实用程序转换功能。

于 2013-06-21T10:13:48.320 回答