BitConverter.java:位处理字节数组处理工具类

概要:

从byte[]数组中读取Int16,Int32,Int64,以及int或long与byte[]数组的相互转换

| |目录

字节处理工具类,可以从byte[]数组中读取Int16,Int32,Int64,以及int或long与byte[]数组的相互转换。

package com.itshidu.util;
/**
 * 位处理,字节处理
 * @author Master.Xia Date:2017年12月15日
 */
public class BitConverter {
	
	public static short ToInt16(byte[] bytes, int offset) {
		short result = (short) ((int)bytes[offset]&0xff);
        result |= ((int)bytes[offset+1]&0xff) << 8;
        return (short) (result & 0xffff);
    }
	public static int ToUInt16(byte[] bytes, int offset) {
		int result = (int)bytes[offset+1]&0xff;
        result |= ((int)bytes[offset]&0xff) << 8;
        return result & 0xffff;
    }
	public static int ToInt32(byte[] bytes, int offset) {
		int result = (int)bytes[offset]&0xff;
        result |= ((int)bytes[offset+1]&0xff) << 8;
        result |= ((int)bytes[offset+2]&0xff) << 16;
        result |= ((int)bytes[offset+3]&0xff) << 24;
        return result;
    }
	public static long ToUInt32(byte[] bytes, int offset) {
        long result = (int)bytes[offset]&0xff;
        result |= ((int)bytes[offset+1]&0xff) << 8;
        result |= ((int)bytes[offset+2]&0xff) << 16;
        result |= ((int)bytes[offset+3]&0xff) << 24;
        return result & 0xFFFFFFFFL;
    }
	public static long ToInt64(byte[] buffer,int offset) {
        long values = 0;
        for (int i = 0; i < 8; i++) {
            values <<= 8; values |= (buffer[offset+i] & 0xFF);
        }
        return values;
    }
	public static long ToUInt64(byte[] bytes, int offset) {
        long result = 0;
        for (int i = 0; i <= 56; i += 8) {
			result |= ((int)bytes[offset++]&0xff) << i;
		}
        return result;
    }
	public static float ToFloat(byte[] bs, int index) {                
	    return Float.intBitsToFloat(ToInt32(bs, index));                  
	}
	public static double ToDouble(byte[] arr,int offset) {
		return Double.longBitsToDouble(ToUInt64(arr, offset));
	}
	public static boolean ToBoolean(byte[] bytes,int offset) {
		return (bytes[offset]==0x00)? false:true;
	}

	public static byte[] GetBytes(short value) {
		byte[] bytes = new byte[2];
		bytes[0] = (byte) (value & 0xff);
		bytes[1] = (byte) ((value & 0xff00) >> 8);
		return bytes;
	}
	public static byte[] GetBytes(int value) {
		byte[] bytes = new byte[4];
		bytes[0] = (byte) ((value)&0xFF); //最低位
		bytes[1] = (byte) ((value >> 8)&0xFF);
		bytes[2] = (byte) ((value >> 16)&0xFF);
		bytes[3] = (byte) ((value >>> 24)); //最高位,无符号右移
		return bytes;
	}
	public static byte[] GetBytes(long values) {
        byte[] buffer = new byte[8];
        for (int i = 0; i < 8; i++) {
            int offset = 64 - (i + 1) * 8;
            buffer[i] = (byte)((values >> offset) & 0xff);
        }
        return buffer;
    }
	public static byte[] GetBytes(float value) {
	    return GetBytes(Float.floatToIntBits(value));
	}
	public static byte[] GetBytes(double val) {
		long value = Double.doubleToLongBits(val);
		return GetBytes(value);
	}
	public static byte[] GetBytes(boolean value) {
		return new byte[]{(byte)(value? 1:0)};
	}
	
	public static byte IntToByte(int x) {
		return (byte) x;
	}
	public static int ByteToInt(byte b) {
		return b & 0xFF;
	}
	public static char ToChar(byte[] bs,int offset) {
        return (char) (((bs[offset] & 0xFF) << 8) | (bs[offset+1] & 0xFF));
    }
	public static byte[] GetBytes(char value) {
        byte[] b = new byte[2];
        b[0] = (byte) ((value & 0xFF00) >> 8);
        b[1] = (byte) (value & 0xFF);
        return b;
    }

	public static byte[] Concat(byte[]... bs) {
		int len = 0,idx=0;
		for(byte[] b:bs)len+=b.length;
		byte[] buffer = new byte[len];
		for(byte[] b:bs) {
			System.arraycopy(b,0, buffer, idx, b.length);
			idx+=b.length;
		}
		return buffer;
	}
	public static void main(String[] args) {
		long a = 123456;
		byte[] b1=GetBytes(a);
		long b= ToInt64(b1, 0);
		System.out.println(b);
	}
}


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消