com.hazelcast.util.ByteUtil Maven / Gradle / Ivy
/*
* Copyright (c) 2008-2013, Hazelcast, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hazelcast.util;
/**
* This class allows to set, clear and check bits of a byte value.
*/
public final class ByteUtil {
/**
* Array of bit positions.
*/
private static final byte[] POWERS = new byte[]{
(byte) (1 << 0), (byte) (1 << 1), (byte) (1 << 2), (byte) (1 << 3),
(byte) (1 << 4), (byte) (1 << 5), (byte) (1 << 6), (byte) (1 << 7)
};
/**
* All members are static and there should
* never be an instance of this class.
*/
private ByteUtil() {
}
/**
* Sets a bit to 1.
*
* @param number the original byte value
* @param index the bit to set
* @return the modified byte value
*/
public static byte setTrue(final byte number, final int index) {
return (byte) (number | POWERS[index]);
}
/**
* Clears a bit, by setting it to 0.
*
* @param number the original byte value
* @param index the bit to set
* @return the modified byte value
*/
public static byte setFalse(final byte number, final int index) {
return (byte) (number & ~(POWERS[index]));
}
/**
* Checks if the index-th bit of number is set.
*
* @param number the byte value
* @param index the bit to check
* @return true if the bit is set, false otherwise
*/
public static boolean isTrue(final byte number, final int index) {
return (number & (POWERS[index])) != 0;
}
/**
* Checks if the index-th bit of number is NOT set.
*
* @param number the byte value
* @param index the bit to check
* @return true if the bit is NOT set, false otherwise
*/
public static boolean isFalse(final byte number, final int index) {
return (number & (POWERS[index])) == 0;
}
public static byte toByte(boolean... values) {
if (values.length > Byte.SIZE) {
throw new IllegalArgumentException(
"Expected less or equal to " + Byte.SIZE + " arguments");
}
byte b = 0;
for (int i = 0; i < values.length; i++) {
b |= values[i] ? POWERS[i] : 0;
}
return b;
}
public static boolean[] fromByte(byte b) {
boolean[] values = new boolean[Byte.SIZE];
for (int i = 0; i < values.length; i++) {
values[i] = (b & POWERS[i]) != 0;
}
return values;
}
public static String toBinaryString(final byte number) {
final StringBuilder builder = new StringBuilder(Byte.SIZE);
for (int i = 0; i < Byte.SIZE; i++) {
final int q = number & POWERS[Byte.SIZE - 1 - i];
builder.append(q != 0 ? '1' : '0');
}
return builder.toString();
}
}