/*
* Copyright [2012-2015] PayPal Software Foundation
*
* 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 ml.shifu.shifu.util;
public class ByteUtils {
public static double bytesToDouble(byte[] bytes, int offset){
return Double.longBitsToDouble(bytesToLong(bytes, offset));
}
public static double bytesToDouble(byte[] bytes){
return Double.longBitsToDouble(bytesToLong(bytes));
}
public static void doubleToBytes(double v, byte[] bytes){
doubleToBytes(v, bytes, 0);
}
public static void doubleToBytes(double v, byte[] bytes, int offset){
longToBytes(Double.doubleToLongBits(v), bytes, offset);
}
public static byte[] doubleToBytes(double v){
return longToBytes(Double.doubleToLongBits(v));
}
public static long bytesToLong(byte[] bytes){
return bytesToLong(bytes, 0);
}
public static long bytesToLong(byte[] bytes, int offset){
long value = 0;
for(int i=0; i<8; i++){
value <<= 8;
value |= (bytes[i+offset] & 0xFF);
}
return value;
}
public static void longToBytes(long v, byte[] bytes){
longToBytes(v, bytes, 0);
}
public static void longToBytes(long v, byte[] bytes, int offset){
long tmp = v;
for(int i=0; i<8; i++){
bytes[offset + 7 - i] = (byte)(tmp & 0xFF);
tmp >>= 8;
}
}
public static byte[] longToBytes(long v){
long tmp = v;
byte[] b = new byte[8];
for(int i=0; i<8; i++){
b[7-i] = (byte)(tmp & 0xFF);
tmp >>= 8;
}
return b;
}
public static int bytesToInt(byte[] bytes){
return bytesToInt(bytes, 0);
}
public static int bytesToInt(byte[] bytes, int offset){
int value = 0;
for(int i=0; i<4; i++){
value <<= 8;
value |= (bytes[i+offset] & 0xFF);
}
return value;
}
public static void intToBytes(int v, byte[] bytes){
intToBytes(v, bytes, 0);
}
public static void intToBytes(int v, byte[] bytes, int offset){
int tmp = v;
for(int i=0; i<4; i++){
bytes[offset + 3 - i] = (byte)(tmp & 0xFF);
tmp >>= 8;
}
}
public static byte[] intToBytes(int v){
int tmp = v;
byte[] b = new byte[4];
for(int i=0; i<4; i++){
b[3-i] = (byte)(tmp & 0xFF);
tmp >>= 8;
}
return b;
}
//////
public static short bytesToShort(byte[] bytes){
return bytesToShort(bytes, 0);
}
public static short bytesToShort(byte[] bytes, int offset){
short value = 0;
for(int i=0; i < 2; i++){
value <<= 8;
value |= (bytes[i+offset] & 0xFF);
}
return value;
}
public static void shortToBytes(short v, byte[] bytes){
shortToBytes(v, bytes, 0);
}
public static void shortToBytes(short v, byte[] bytes, int offset){
int tmp = v;
for(int i=0; i < 2; i++){
bytes[offset + 1 - i] = (byte)(tmp & 0xFF);
tmp >>= 8;
}
}
public static byte[] shortToBytes(short v){
int tmp = v;
byte[] b = new byte[2];
for(int i=0; i<2; i++){
b[1-i] = (byte)(tmp & 0xFF);
tmp >>= 8;
}
return b;
}
public static byte[] concat(byte[]... arrays) {
int length = 0;
for (byte[] array : arrays) {
length += array.length;
}
byte[] result = new byte[length];
int pos = 0;
for (byte[] array : arrays) {
System.arraycopy(array, 0, result, pos, array.length);
pos += array.length;
}
return result;
}
}