/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.directa.internal.core.messages; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class Util { public Util() { } public static float getFloat(byte[] arr, int i) { if (arr.length < i + 4) { return 0.0F; } int j = 0; int k = 0; for (int l = 0; l < 4; l++) { k += byteToInt(arr[i + l]) << j; j += 8; } float f = Float.intBitsToFloat(k); return f; } public static int getUInt(byte[] arr, int i) { return (int) unpackLong(arr, i, 2); } public static int getMessageLength(byte[] arr, int i) { if (arr.length < i + 2) { return 0; } int j = 0; int k = 0; for (int l = 0; l < 2; l++) { j += byteToInt(arr[i + l]) << k; k += 8; } return j; } public static short getByte(byte b) { return (short) byteToInt(b); } public static long getUlong(byte[] arr, int i) { return unpackLong(arr, i, 4); } public static long getDataOra(byte[] arr, int i, int j) { long k = 0; int l = 0; for (int i1 = 0; i1 < 4; i1++) { k += (long) byteToInt(arr[i1 + i]) << l; l += 8; } long j1 = k >> 20; long k1 = k - (j1 << 20); k1 /= 12; long l1 = k1 / 3600; GregorianCalendar gregoriancalendar = new GregorianCalendar(2000 + j * 10, 0, 1, 0, 0, 0); long l2 = ((Calendar) gregoriancalendar).getTime().getTime(); long l3 = j1 * 3600 * 24 * 1000 + k1 * 1000; long l4 = l2 + l3; ((Calendar) gregoriancalendar).setTime(new Date(l4)); ((Calendar) gregoriancalendar).set(11, (int) l1); return ((Calendar) gregoriancalendar).getTime().getTime(); } public static int byteToInt(byte b) { int i = b; if (b < 0) { i = 256 + b; } return i; } private static long unpackLong(byte[] arr, int i, int j) { if (arr.length < i + j) { return 0L; } long l = 0L; int k = (j - 1) * 8; for (int i1 = 0; i1 < j; i1++) { l += byteToInt(arr[i + i1]) << k; k -= 8; } return l; } }