/**
* edu.utexas.GeDBIT.mckoi.util.ByteArrayUtil 26 Jun 2000
*
* Mckoi SQL Database ( http://www.mckoi.com/database )
* Copyright (C) 2000, 2001, 2002 Diehl and Associates, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* Version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License Version 2 for more details.
*
* You should have received a copy of the GNU General Public License
* Version 2 along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Change Log:
*
*
*/
package GeDBIT.mckoi.util;
/**
* Static utilities for byte arrays.
*
* @author Tobias Downer
*/
public class ByteArrayUtil {
/**
* Returns the chart at the given offset of the byte array.
*/
public static final char getChar(byte[] arr, int offset) {
int c1 = (((int) arr[offset + 0]) & 0x0FF);
int c2 = (((int) arr[offset + 1]) & 0x0FF);
return (char) ((c1 << 8) + (c2));
}
/**
* Sets the short at the given offset of the byte array.
*/
public static final void setChar(char value, byte[] arr, int offset) {
arr[offset + 0] = (byte) ((value >>> 8) & 0x0FF);
arr[offset + 1] = (byte) ((value >>> 0) & 0x0FF);
}
/**
* Returns the short at the given offset of the byte array.
*/
public static final short getShort(byte[] arr, int offset) {
int c1 = (((int) arr[offset + 0]) & 0x0FF);
int c2 = (((int) arr[offset + 1]) & 0x0FF);
return (short) ((c1 << 8) + (c2));
}
/**
* Sets the short at the given offset of the byte array.
*/
public static final void setShort(short value, byte[] arr, int offset) {
arr[offset + 0] = (byte) ((value >>> 8) & 0x0FF);
arr[offset + 1] = (byte) ((value >>> 0) & 0x0FF);
}
/**
* Returns the int at the given offset of the byte array.
*/
public static final int getInt(byte[] arr, int offset) {
int c1 = (((int) arr[offset + 0]) & 0x0FF);
int c2 = (((int) arr[offset + 1]) & 0x0FF);
int c3 = (((int) arr[offset + 2]) & 0x0FF);
int c4 = (((int) arr[offset + 3]) & 0x0FF);
return (c1 << 24) + (c2 << 16) + (c3 << 8) + (c4);
}
/**
* Sets the int at the given offset of the byte array.
*/
public static final void setInt(int value, byte[] arr, int offset) {
arr[offset + 0] = (byte) ((value >>> 24) & 0xFF);
arr[offset + 1] = (byte) ((value >>> 16) & 0xFF);
arr[offset + 2] = (byte) ((value >>> 8) & 0xFF);
arr[offset + 3] = (byte) ((value >>> 0) & 0xFF);
}
/**
* Returns the long at the given offset of the byte array.
*/
public static final long getLong(byte[] arr, int offset) {
long c1 = (((int) arr[offset + 0]) & 0x0FF);
long c2 = (((int) arr[offset + 1]) & 0x0FF);
long c3 = (((int) arr[offset + 2]) & 0x0FF);
long c4 = (((int) arr[offset + 3]) & 0x0FF);
long c5 = (((int) arr[offset + 4]) & 0x0FF);
long c6 = (((int) arr[offset + 5]) & 0x0FF);
long c7 = (((int) arr[offset + 6]) & 0x0FF);
long c8 = (((int) arr[offset + 7]) & 0x0FF);
return (c1 << 56) + (c2 << 48) + (c3 << 40) + (c4 << 32) + (c5 << 24)
+ (c6 << 16) + (c7 << 8) + (c8);
}
/**
* Sets the long at the given offset of the byte array.
*/
public static final void setLong(long value, byte[] arr, int offset) {
arr[offset + 0] = (byte) ((value >>> 56) & 0xFF);
arr[offset + 1] = (byte) ((value >>> 48) & 0xFF);
arr[offset + 2] = (byte) ((value >>> 40) & 0xFF);
arr[offset + 3] = (byte) ((value >>> 32) & 0xFF);
arr[offset + 4] = (byte) ((value >>> 24) & 0xFF);
arr[offset + 5] = (byte) ((value >>> 16) & 0xFF);
arr[offset + 6] = (byte) ((value >>> 8) & 0xFF);
arr[offset + 7] = (byte) ((value >>> 0) & 0xFF);
}
}