package com.njcn.common.utils.wave;

public class BitConverter {

    /**
     * byte数组转换为无符号short整数
     * @param bytes byte数组
     * @param off 开始位置
     * @return short整数
     */
    public static short byte2ToUnsignedShort(byte[] bytes, int off) {
        int low = bytes[off]& 0xFF;
        int high = bytes[off + 1]& 0xFF;
        return (short)(((high & 0x00FF) << 8) | (0x00FF & low));
    }

    /**
     * 字节转换为浮点
     *
     * @param b 字节（至少4个字节）
     * @param index 开始位置
     * @return
     */
    public static float byte4float(byte[] b, int index) {
       /* b=new byte[4];
        b[0]=-16;
        b[1]=-1;
        b[2]=117;
        b[3]=66;*/

        int l;
        l = b[index + 0];
        l &= 0xff;
        l |= ((long) b[index + 1] << 8);
        l &= 0xffff;
        l |= ((long) b[index + 2] << 16);
        l &= 0xffffff;
        l |= ((long) b[index + 3] << 24);
        return Float.intBitsToFloat(l);
    }
    /**
     * byte数组转换为int32整数
     * @param bytes byte数组
     * @param off 开始位置
     * @return int整数
     */
    public static int byte4ToInt(byte[] bytes, int off) {
        int b0 = bytes[off] & 0xFF;
        int b1 = bytes[off + 1] & 0xFF;
        int b2 = bytes[off + 2] & 0xFF;
        int b3 = bytes[off + 3] & 0xFF;
        return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
    }

    /**
     * byte数组转换为int16整数
     * @param bytes byte数组
     * @param off 开始位置
     * @return int整数
     */
    public static int byte2ToInt(byte[] bytes, int off) {
        int b0 = bytes[off] & 0xFF;
        int b1 = bytes[off + 1] & 0xFF;
        return (b1 << 8) | b0;
    }

    /**
     * byte数组转换为int16整数
     * @param bytes byte数组
     * @param off 开始位置
     * @return int整数
     */
    public static long byte4ToLong(byte[] bytes, int off) {
        long b0 = bytes[off] & 0xFF;
        long b1 = bytes[off + 1] & 0xFF;
        long b2 = bytes[off + 2] & 0xFF;
        long b3 = bytes[off + 3] & 0xFF;

        return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
    }
}
