java 基本类型与byte[]相互转换

来源:互联网 发布:js 批量 import 编辑:程序博客网 时间:2024/04/29 15:35
//long类型转成byte数组public static byte[] longToBytes(long number) {        long temp = number;        byte[] b = new byte[8];        for (int i = 0; i < b.length; i++) {            b[i] = new Long(temp & 0xff).byteValue();// 将最低位保存在最低位        temp = temp >> 8; // 向右移8位    }    return b;}//byte数组转成longpublic static long bytesToLong(byte[] b) {    long s = 0;    long s0 = b[0] & 0xff;// 最低位    long s1 = b[1] & 0xff;    long s2 = b[2] & 0xff;    long s3 = b[3] & 0xff;    long s4 = b[4] & 0xff;// 最低位    long s5 = b[5] & 0xff;    long s6 = b[6] & 0xff;    long s7 = b[7] & 0xff;    // s0不变    s1 <<= 8;    s2 <<= 16;    s3 <<= 24;    s4 <<= 8 * 4;    s5 <<= 8 * 5;    s6 <<= 8 * 6;    s7 <<= 8 * 7;    s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7;    return s;}public static byte[] intToBytes(int number) {    int temp = number;    byte[] b = new byte[4];    for (int i = 0; i < b.length; i++) {        b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位        temp = temp >> 8; // 向右移8位    }    return b;}public static int bytesToInt(byte[] b) {    int s = 0;    int s0 = b[0] & 0xff;// 最低位    int s1 = b[1] & 0xff;    int s2 = b[2] & 0xff;    int s3 = b[3] & 0xff;    s3 <<= 24;    s2 <<= 16;    s1 <<= 8;    s = s0 | s1 | s2 | s3;    return s;}//浮点到字节转换public static byte[] doubleToBytes(double d){byte writeBuffer[]= new byte[8];     long v = Double.doubleToLongBits(d);        writeBuffer[0] = (byte)(v >>> 56);        writeBuffer[1] = (byte)(v >>> 48);        writeBuffer[2] = (byte)(v >>> 40);        writeBuffer[3] = (byte)(v >>> 32);        writeBuffer[4] = (byte)(v >>> 24);        writeBuffer[5] = (byte)(v >>> 16);        writeBuffer[6] = (byte)(v >>>  8);        writeBuffer[7] = (byte)(v >>>  0);        return writeBuffer;}//字节到浮点转换public static double bytesToDouble(byte[] readBuffer){     return Double.longBitsToDouble((((long)readBuffer[0] << 56) +                ((long)(readBuffer[1] & 255) << 48) +                ((long)(readBuffer[2] & 255) << 40) +                ((long)(readBuffer[3] & 255) << 32) +                ((long)(readBuffer[4] & 255) << 24) +                ((readBuffer[5] & 255) << 16) +                ((readBuffer[6] & 255) <<  8) +                ((readBuffer[7] & 255) <<  0))          );}

以上代码经过了我测试。请注意double和byte[]的相互转换,目前网上流传最多的那个算法经我测试不能正常工作(当数值小于10.0时),我这个是参考一个VC程序员的代码改成的。
原创粉丝点击