android byte[] 和short[]转换的方法代码


在Android(或Java)中,将`byte[]`数组转换为`short[]`数组,以及反向转换,主要涉及到位操作和类型转换。这里提供两种情况的代码示例:

### byte[] 转换为 short[]

通常,`byte`数组中的两个字节组合成一个`short`。这里假设`byte`数组是偶数长度,且以大端序(big-endian)或小端序(little-endian)存储`short`值。以下示例采用小端序方式:


public static short[] bytesToShorts(byte[] bytes, boolean littleEndian) {
    if (bytes.length % 2 != 0) {
        throw new IllegalArgumentException("Bytes array length must be even");
    }
    int len = bytes.length / 2;
    short[] shorts = new short[len];
    for (int i = 0; i < len; i++) {
        int index = i * 2;
        if (littleEndian) {
            shorts[i] = (short) ((bytes[index] & 0xFF) | (bytes[index + 1] << 8));
        } else {
            shorts[i] = (short) ((bytes[index + 1] & 0xFF) | (bytes[index] << 8));
        }
    }
    return shorts;
}

### short[] 转换为 byte[]

将`short[]`转换回`byte[]`时,同样需要注意字节序:


public static byte[] shortsToBytes(short[] shorts, boolean littleEndian) {
    byte[] bytes = new byte[shorts.length * 2];
    for (int i = 0; i < shorts.length; i++) {
        int index = i * 2;
        if (littleEndian) {
            bytes[index] = (byte) (shorts[i] & 0xFF);
            bytes[index + 1] = (byte) ((shorts[i] >> 8) & 0xFF);
        } else {
            bytes[index + 1] = (byte) (shorts[i] & 0xFF);
            bytes[index] = (byte) ((shorts[i] >> 8) & 0xFF);
        }
    }
    return bytes;
}

注意:上述方法假设你的`byte`数组长度是偶数,因为一个`short`由两个`byte`组成。如果长度不是偶数,你需要先处理这个问题,否则在转换过程中会抛出异常。

此外,这些方法都接受一个`boolean`参数`littleEndian`来指定字节序。根据你的具体需求,你可以选择使用大端序还是小端序。