public static bool[] HexToBoolBinary(byte[] hexBytes)
    {
        byte[] binaryBytes = new byte[hexBytes.Length * 8];
        bool[] res = new bool[hexBytes.Length * 8];

        for (int i = 0; i < hexBytes.Length; i++)
        {
            byte hexByte = hexBytes[i];

            for (int j = 0; j < 8; j++)
            {
                byte binaryBit = (byte)((hexByte >> (7 - j)) & 1);
                binaryBytes[i * 8 + j] = binaryBit;
                res[i * 8 + j] = binaryBit == 0 ? false : true;
            }
        }
        return res;
    }

    public static byte[] BinaryToHex(byte[] binaryBytes)
    {
        int hexLength = binaryBytes.Length / 8;
        byte[] hexBytes = new byte[hexLength];

        for (int i = 0; i < hexLength; i++)
        {
            byte hexByte = 0;

            for (int j = 0; j < 8; j++)
            {
                byte binaryBit = binaryBytes[i * 8 + j];
                hexByte = (byte)((hexByte << 1) | binaryBit);
            }

            hexBytes[i] = hexByte;
        }

        return hexBytes;
    }