package org.wcs.utils;

/**
 * 数据转换类
 */
public class Converter {

    /**
     * int转byte
     * @param value int值
     * @return byte值
     */
    public static byte toByte(int value) {
        if(value < Byte.MIN_VALUE || value > Byte.MAX_VALUE){
            throw new IllegalArgumentException("value is not in byte range");
        }
        return (byte) value;
    }

    /**
     * int转byte数组
     * @param value int值
     * @return byte数组
     */
    public static byte[] toBytes(int value) {
        return new byte[]{
                (byte) (value >>> 24),
                (byte) (value >>> 16),
                (byte) (value >>> 8),
                (byte) value
        };
    }

    /**
     * byte数组转int
     * @param bytes byte数组
     * @return int值
     */
    public static int bytesToInt(byte[] bytes) {
        return (bytes[0] & 0xFF) << 24 |
                (bytes[1] & 0xFF) << 16 |
                (bytes[2] & 0xFF) << 8 |
                (bytes[3] & 0xFF);
    }

    /**
     * short转byte数组
     * @param value short值
     * @return byte数组
     */
    public static byte[] toBytes(short value) {
        return new byte[]{
                (byte) (value >>> 8),
                (byte) value
        };
    }

    /**
     * byte数组转short
     * @param bytes byte数组
     * @return short值
     */
    public static short bytesToShort(byte[] bytes) {
        return (short) ((bytes[0] & 0xFF) << 8 |
                (bytes[1] & 0xFF));
    }

    /**
     * 二进制字符串转 byte
     * @param value 二进制字符串
     * @return byte值
     */
    public static byte toByte(String value) {
        int intValue = Integer.parseInt(value, 2);
        return toByte(intValue);
    }

    /**
     * byte转二进制字符串
     * @param value byte值
     * @return 转换过后的二进制字符串
     */
    public static String toBinaryString(byte value) {
        String binaryString = Integer.toBinaryString(value & 0xFF);
        return String.format("%8s", binaryString).replace(' ', '0');
    }
}
