package yqw.java.util;
/** * 数字转换工具 */public class MathUtils { /** * short转byte */ public static byte[] toBytes(short s) { return new byte[] { (byte) (s & 0x00FF), (byte) ((s & 0xFF00) >> 8) }; } /** * getAvgEnergy for int[] * * @param voiceEnergy * @return */ public static int getAvgEnergy(int[] voiceEnergy) { int tmpSum = 0; int voiceLen = voiceEnergy.length; for (int i = 0; i < voiceLen; i++) { tmpSum += Math.abs(voiceEnergy[i]); } return tmpSum / voiceLen; } /** * byte[] to int [] * * @param byteData * @return */ public static int[] convertToInt(byte[] byteData) { if (byteData == null || byteData.length == 0) return null; int[] data = new int[byteData.length / 2]; for (int i = 0; i < byteData.length; i = i + 2) { data[i / 2] = arr2int(byteData[i], byteData[i + 1]); } return data; } /** * arr2int * * @param arr0 * @param arr1 * @return */ public static int arr2int(byte arr0, byte arr1) { int iLow = arr0; int iHigh = arr1; // Merge high-order and low-order byte to form a 16-bit double value. short i = (short) ((iHigh << 8) | (0xFF & iLow)); return (int) i; } /** * short转换至字节数组 * * @param s * @return */ public static byte[] shortToByteArray(short s) { byte[] targets = new byte[2]; for (int i = 0; i < 2; i++) { int offset = (targets.length - 1 - i) * 8; targets[i] = (byte) ((s >>> offset) & 0xff); } return targets; } /** * unsigned short转byte */ public static byte[] unsignedShortToBytes(int s) { return new byte[] { (byte) (s & 0x000000FF), (byte) ((s & 0x0000FF00) >> 8) }; } /** * int转byte */ public static byte[] toBytes(int s) { return new byte[] { (byte) (s & 0x000000FF), (byte) ((s & 0x0000FF00) >> 8), (byte) ((s & 0x00FF0000) >> 16), (byte) ((s & 0xFF000000) >> 24) }; } /** * byte转int */ public static int toInt(byte[] b) { return b[0] & 0xff | (b[1] & 0xff) << 8 | (b[2] & 0xff) << 16 | (b[3] & 0xff << 24); } /** * byte转long */ public static long toUnsignedInt(byte[] b) { return b[0] & 0xff | (b[1] & 0xff) << 8 | (b[2] & 0xff) << 16 | (b[3] << 24); } /** * byte转short */ public static short toShort(byte[] b) { // return (short) (b[0] << 24 | (b[1] & 0xff) << 16) ; return (short) (((b[1] << 8) | b[0] & 0xff)); } /** * byte转unsigned short */ public static int toUnsignedShort(byte[] b) { return (b[0] << 24 | (b[1] & 0xff) << 16); } /** * Assume the long is used as unsigned int * * @param s * @return */ public static byte[] unsignedIntToBytes(long s) { return new byte[] { (byte) (s & 0x00000000000000FF), (byte) ((s & 0x000000000000FF00) >> 8), (byte) ((s & 0x0000000000FF0000) >> 16), (byte) ((s & 0x00000000FF000000) >> 24) }; } /** * float转换byte * * @param x * @param index */ public static byte[] putFloat(float x) { byte[] b = new byte[4]; int l = Float.floatToIntBits(x); for (int i = 0; i < 4; i++) { b[i] = new Integer(l).byteValue(); l = l >> 8; } return b; } /** * 通过byte数组取得float * * @param b * @return */ public static float getFloat(byte[] b) { int l; l = b[0]; l &= 0xff; l |= ((long) b[1] << 8); l &= 0xffff; l |= ((long) b[2] << 16); l &= 0xffffff; l |= ((long) b[3] << 24); return Float.intBitsToFloat(l); }}